如何在Symfony中的url query_string中发送params?

时间:2017-05-07 13:37:30

标签: symfony url parameters query-string

我想从Twig页面发送query_string URL中的参数并将其放入控制器中。

例如:index.html.twig

<a href="/newcont/add/{{ id }}">New</a>

controller

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class Newcont extends Controller
{
    /**
     * @Route("/newcont/add/{id}", requirements={"id": "\d+"})
     */
    public function addAction(Request $request){

        $params = $request->request->all();
        //$id = $request->query->get();
        var_dump($params);
        die;
    }
}

我想要一个带有twig中变量的url,并将其发送到控制器操作。

1 个答案:

答案 0 :(得分:5)

从不硬编码路线!在模板中使用路由帮助程序。首先给你的路线命名,在这种情况下我把它命名为“myroute”,当然你应该使用更有意义的东西:

class Newcont extends Controller
{
    /**
     * @Route("/newcont/add/{id}", name="myroute", requirements={"id": "\d+"})
     */

然后在您的Twig文件中,使用path帮助程序为您生成正确的路径:

<a href="{{ path('myroute', {'id': 7}) }}">New</a>

您当然可以用变量替换7。

<a href="{{ path('myroute', {'id': myTwigVar}) }}">New</a>

在您的控制器中,您可以直接获取id参数,因此您不必使用请求服务:

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

您可以这样做,因为您已在路线中明确命名此参数并且它是必需的,因此在所有情况下都会定义它。它使代码更清晰,更易于阅读。它还允许删除无用的代码。

注意,在这种情况下,您不想修改查询字符串,而是修改路径。查询字符串位于?foo=bar之类的路径之后。