我想从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,并将其发送到控制器操作。
答案 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
之类的路径之后。