symfony2路由参数和请求
我有这条路线symfony2路由参数和请求,symfony,Symfony,我有这条路线 edit_project: pattern: /edit/{id} defaults: { _controller: CpjProjectsBundle:Project:edit } requirements: id: \d+ 这是控制器: public function editAction(Request $request) { } 在控制器内部,我无法接收id $this->query->get('id'); //e
edit_project:
pattern: /edit/{id}
defaults: { _controller: CpjProjectsBundle:Project:edit }
requirements:
id: \d+
这是控制器:
public function editAction(Request $request)
{
}
在控制器内部,我无法接收id
$this->query->get('id'); //empty
如果我更改了方法签名,它将起作用:
public function editAction($id)
但是我需要请求来处理表单,通常是这样
$form->handleRequest($request);
有什么解决办法的建议吗?
非常感谢您的最终URL如下所示:
http://my.domain.com/edit/123
所以URL没有查询部分(…?id=123
)。您应该接受请求
对象和id
作为函数的参数:
public function editAction(Request $request, $id)
{
var_dump($request, $id);
}
使用该url,如果希望访问该id,则将其作为另一个参数传递给函数。但您可能希望获取与该id关联的项目实体。您可以在控制器中保存一个步骤,并让symfony通过键入
$id
变量来查找该步骤,如下所示:
<?php
namespace Cpj\ProjectsBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Cpj\ProjectsBundle\Entity\Project;
//Other use statements
class PrjectController extends Controller
{
public function editAction(Request $request, Project $id)
{
var_dump($id);
// This will be and instance of Cpj\ProjectsBundle\Entity\Project
//if you need the actual ID of it you can do the following
$realID = $id->getId()
}
}