如何在symfony2中获取请求参数

时间:2012-03-20 10:23:24

标签: php symfony

我是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()方法时出错了。任何帮助将不胜感激。

16 个答案:

答案 0 :(得分:398)

命名并不是那么直观:

use Symfony\Component\HttpFoundation\Request;

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

    // $_POST parameters
    $request->request->get('name');

答案 1 :(得分:31)

我做得更简单:

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;
}

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

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }

答案 2 :(得分:16)

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

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()

答案 3 :(得分:12)

$request->request->get('acme_demobundle_usertype')['username']

检查公式字段的属性名称

答案 4 :(得分:9)

在控制器内:

$request = $this->getRequest();
$username = $request->get('username');

答案 5 :(得分:9)

您的选择:

  1. 简单:
    • $request->request->get('param')$_POST['param'])或
    • $request->query->get('param')$_GET['param']
  2. 良好的Symfony形式包含所有验证,价值转换和带错误的表单呈现以及许多其他功能:
  3. 介于两者之间(见下面的例子)
  4. <?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

    的更多信息

答案 6 :(得分:8)

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

public function someAction(Request $request)

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

如果您想从以下请求中获取POST数据:

$request->request->get('var_name');

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

$request->query->get('var_name');

答案 7 :(得分:6)

你可以这样做:

$clientName = $request->request->get('appbundle_client')['clientName'];

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

(POST)

 $clientName = $request->request->get('clientName');

(GET)

$clientName = $request->query->get('clientName');

(通用)

$clientName = $request->get('clientName');

答案 8 :(得分:2)

上面的答案涵盖了大多数情况,例如获取查询字符串或表单参数。

使用原始数据时,例如您希望作为[{1}}参数提供的正文中的原始JSON字符串,可以使用方法Request::getContent()

json_decode()

可以在HttpFoundation包的文档中找到有关Symfony中HTTP请求的其他有用信息。

答案 9 :(得分:1)

$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');

答案 10 :(得分:1)

use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request, $id) {

    $post = $request->request->all();

    $request->request->get('username');

}

谢谢,您也可以使用上面的代码

答案 11 :(得分:1)

#www.example / register / admin

  /**
 * @Route("/register/{role}", name="app_register", methods={"GET"})
 */
public function register(Request $request, $role): Response
{
 echo $role ;
 }

答案 12 :(得分:0)

如果您需要从select中获取值,可以使用:

$form->get('nameSelect')->getClientData();

答案 13 :(得分:0)

试试这个,它有效

$this->request = $this->container->get('request_stack')->getCurrentRequest();

此致

答案 14 :(得分:0)

public function indexAction(Request $request)
{
   $data = $request->get('corresponding_arg');
   // this also works
   $data1 = $request->query->get('corresponding_arg1');
}

答案 15 :(得分:0)

对于symfony 4用户:

$query = $request->query->get('query');