我对symfony很陌生。在其他语言中,如java和其他语言,我可以使用request.getParameter('parmeter name')
来获取值。
我们可以用symfony2做类似的事情吗?
我看过一些例子,但没有一个对我有用。假设我有一个用户名名称的表单字段。在表单操作中,我尝试使用这样的东西:
$request = $this->getRequest();
$username= $request->request->get('username');
我也试过
$username = $request->getParameter('username');
和
$username=$request->request->getParameter('username');
但是没有一个选项有效。但是以下工作正常:
foreach($request->request->all() as $req){
print_r($req['username']);
}
我在哪里做错了getParameter()
方法。任何帮助将不胜感激。
命名不是那么直观:
use Symfony'Component'HttpFoundation'Request;
public function updateAction(Request $request)
{
// $_GET parameters
$request->query->get('name');
// $_POST parameters
$request->request->get('name');
// As of 6.3 Posted or json content
$request->getPayload()->get('name');
2021 年 11 月更新:$request->get('name'( 已在 5.4 中弃用,自 6.0 起将变为私有版本。 它的使用已经有一段时间了。
2023 年 5 月更新:从 6.3 开始,已为 post/json 数据添加了 getPayload 方法。
我做得更简单:
use Symfony'Component'HttpFoundation'Request;
public function updateAction(Request $request)
{
$foo = $request->get('foo');
$bar = $request->get('bar');
}
另一种选择是将参数引入操作函数定义中:
use Symfony'Component'HttpFoundation'Request;
public function updateAction(Request $request, $foo, $bar)
{
echo $foo;
echo $bar;
}
然后假设您在 routeting.yml 文件中将 {foo} 和 {bar} 定义为 URL 模式的一部分:
acme_myurl:
pattern: /acme/news/{foo}/{bar}
defaults: { _controller: AcmeBundle:Default:getnews }
您可以使用以下代码获取表单字段值
use Symfony'Component'HttpFoundation'Request;
public function updateAction(Request $request)
{
// retrieve GET and POST variables respectively
$request->query->get('foo');
$request->request->get('bar', 'default value if bar does not exist');
}
或者您也可以使用
$request->request->all()
试试
$request->request->get('acme_demobundle_usertype')['username']
检查公式字段的属性名称
在控制器内部:
$request = $this->getRequest();
$username = $request->get('username');
现在$this->getRequest()
该方法已被弃用,您需要Request
对象注入到控制器操作中,如下所示:
public function someAction(Request $request)
之后,您可以使用以下方法之一。
如果要从请求中获取 POST 数据,请使用以下命令:
$request->request->get('var_name');
但是如果你想从请求中获取GET数据,请使用这个:
$request->query->get('var_name');
您的选项:
- 简单:
-
$request->request->get('param')
($_POST['param']
( 或 -
$request->query->get('param')
($_GET['param']
(
-
- 良好的Symfony表单具有所有验证,值转换和表单渲染,具有错误和许多其他功能:
- http://symfony.com/doc/current/book/forms.html
- http://symfony.com/doc/current/cookbook/form/index.html
- 介于两者之间的内容(见下面的示例(
<?php
/**
* @Route("/customers", name="customers")
*
* @param Request $request
* @return Response
*/
public function index(Request $request)
{
$optionsResolver = new OptionsResolver();
$optionsResolver->setDefaults([
'email' => '',
'phone' => '',
]);
$filter = $optionsResolver->resolve($request->query->all());
/** @var CustomerRepository $customerRepository */
$customerRepository = $this->getDoctrine()->getRepository('AppBundle:Customer');
/** @var Customer[] $customers */
$customers = $customerRepository->findFilteredCustomers($filter);
return $this->render(':customers:index.html.twig', [
'customers' => $customers,
'filter' => $filter,
]);
}
关于OptionsResolver
- http://symfony.com/doc/current/components/options_resolver.html
你可以这样做:
$clientName = $request->request->get('appbundle_client')['clientName'];
有时,当属性受到保护时,您无权获取常用访问方法的值:
(后(
$clientName = $request->request->get('clientName');
(得到(
$clientName = $request->query->get('clientName');
(通用(
$clientName = $request->get('clientName');
上面的答案中涵盖了大多数情况,例如获取查询字符串或表单参数。
处理原始数据时,例如正文中的原始 JSON 字符串,您希望将其作为参数提供给json_decode()
,可以使用方法 Request::getContent()
。
$content = $request->getContent();
有关 Symfony 中 HTTP 请求的其他有用信息可以在 HttpFoundation 包的文档中找到。
对于symfony 4用户:
$query = $request->query->get('query');
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');
use Symfony'Component'HttpFoundation'Request;
public function indexAction(Request $request, $id) {
$post = $request->request->all();
$request->request->get('username');
}
谢谢,你也可以使用上面的代码
#www.example/register/admin
/**
* @Route("/register/{role}", name="app_register", methods={"GET"})
*/
public function register(Request $request, $role): Response
{
echo $role ;
}
如果需要从选择中获取值,可以使用:
$form->get('nameSelect')->getClientData();
试试这个,它有效
$this->request = $this->container->get('request_stack')->getCurrentRequest();
问候
public function indexAction(Request $request)
{
$data = $request->get('corresponding_arg');
// this also works
$data1 = $request->query->get('corresponding_arg1');
}