如何在symfony2中获取请求参数

dar*_*mid 196 php symfony

我是symfony的新手.在其他语言如java和其他语言中我可以request.getParameter('parmeter name')用来获取值.

我们可以用symfony2做类似的事吗.
我见过一些例子,但没有一个对我有用.假设我有一个名称为username的表单字段.在表单操作中,我尝试使用以下内容:

$request = $this->getRequest();
$username= $request->request->get('username'); 
Run Code Online (Sandbox Code Playgroud)

我也试过了

$username = $request->getParameter('username');

$username=$request->request->getParameter('username');
Run Code Online (Sandbox Code Playgroud)

但是没有一个选项可行.但是后续工作正常:

foreach($request->request->all() as $req){
    print_r($req['username']);
}
Run Code Online (Sandbox Code Playgroud)

我在哪里使用getParameter()方法做错了.任何帮助将不胜感激.

Cer*_*rad 407

命名并不是那么直观:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // $_GET parameters
    $request->query->get('name');

    // $_POST parameters
    $request->request->get('name');
Run Code Online (Sandbox Code Playgroud)

  • 它与PHP使用的不同,但它实际上更有意义.`$ _GET`数据是来自查询字符串的数据(根本不需要'GET`请求),而'$ _POST`数据是来自请求体的数据(也不一定是'POST`请求​​,可能是`PUT `). (45认同)
  • 这里非常奇怪的命名,肯定`$ request-> get`和`$ request-> post`会更简单. (9认同)
  • 如何从PUT请求中获取参数? (6认同)
  • 尝试$ request-> query-> get('name'); 但它也没有用. (5认同)
  • 来自igorw的评论为这个怪异的命名惯例带来了清晰度 (3认同)

pko*_*out 31

我做得更简单:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    $foo = $request->get('foo');
    $bar = $request->get('bar');
}
Run Code Online (Sandbox Code Playgroud)

另一个选择是将您的参数引入您的动作函数定义:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request, $foo, $bar)
{
    echo $foo;
    echo $bar;
}
Run Code Online (Sandbox Code Playgroud)

然后假定您在routing.yml文件中将{foo}和{bar}定义为URL模式的一部分:

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }
Run Code Online (Sandbox Code Playgroud)

  • 不,这不对.该方法的文档本身表示不鼓励使用它,因为它比通过其特定集合访问GET/POST参数更重. (6认同)
  • 看起来优先级是 GET、PATH、POST http://api.symfony.com/master/Symfony/Component/HttpFoundation/Request.html#method_get (2认同)
  • **答案是正确的** `$request->get('foo');` 适用于所有包(顺序是:PATH、GET、POST)。尽管如此,`$request->request->get('foo');` 仅适用于 POST 包。最后,如果我们知道数据在哪里(GET/POST),不推荐第一个(`$request->get()`)。 (2认同)

Sco*_*ion 17

您可以使用以下代码获取表单字段值

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');
}
Run Code Online (Sandbox Code Playgroud)

或者您也可以通过使用获取所有表单值作为数组

$request->request->all()
Run Code Online (Sandbox Code Playgroud)

  • $ request-> request-> all()对我有用,但是像$ request-> query-> get('foo'); 不管用. (3认同)

小智 12

尝试

$request->request->get('acme_demobundle_usertype')['username']
Run Code Online (Sandbox Code Playgroud)

检查您的公式字段的属性名称

  • @justinasLelys尝试$ userType = $ request-> request-> get('acme_demobundle_usertype'); $ username = $ userType ['username']; (2认同)

Rei*_*erd 9

在控制器内:

$request = $this->getRequest();
$username = $request->get('username');
Run Code Online (Sandbox Code Playgroud)

  • 在较新版本的Symfony中,不推荐使用`$ this-> getRequest()`,而是将请求注入到控制器操作中,例如:`public function showAction(Request $ request,$ id);` (6认同)

luc*_*nov 9

你的选择:

  1. 简单:
    • $request->request->get('param')($_POST['param'])或
    • $request->query->get('param')($_GET['param'])
  2. 良好的Symfony形式包含所有验证,价值转换和带错误的表单呈现以及许多其他功能:
  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,
    ]);
}
Run Code Online (Sandbox Code Playgroud)

更多关于OptionsResolver- http://symfony.com/doc/current/components/options_resolver.html


Ash*_*thi 8

由于现在$this->getRequest()不推荐使用方法,您需要将Request对象注入控制器操作,如下所示:

public function someAction(Request $request)
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用以下之一.

如果要从请求中获取POST数据,请执行以下操作:

$request->request->get('var_name');
Run Code Online (Sandbox Code Playgroud)

但是如果你想从请求中获取GET数据,请使用:

$request->query->get('var_name');
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以这样做:

$clientName = $request->request->get('appbundle_client')['clientName'];
Run Code Online (Sandbox Code Playgroud)

有时,当属性受到保护时,您无权获取通用访问方法的值:

(POST)

 $clientName = $request->request->get('clientName');
Run Code Online (Sandbox Code Playgroud)

(得到)

$clientName = $request->query->get('clientName');
Run Code Online (Sandbox Code Playgroud)

(通用)

$clientName = $request->get('clientName');
Run Code Online (Sandbox Code Playgroud)