如何在 Symfony 2 中获取请求参数


How to get the request parameters in Symfony 2?

我对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');

您的选项:

  1. 简单:
    • $request->request->get('param') ( $_POST['param'] ( 或
    • $request->query->get('param') ( $_GET['param'] (
  2. 良好的Symfony表单具有所有验证,值转换和表单渲染,具有错误和许多其他功能:
    • http://symfony.com/doc/current/book/forms.html
    • http://symfony.com/doc/current/cookbook/form/index.html
  3. 介于两者之间的内容(见下面的示例(
<?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');
}