我有这条路线
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);
有关解决方法的任何建议吗? 非常感谢
答案 0 :(得分:0)
您的最终网址如下所示:http://my.domain.com/edit/123
因此网址(...?id=123
)中没有查询部分。您应该接受Request
对象和id
作为函数的参数:
public function editAction(Request $request, $id)
{
var_dump($request, $id);
}
答案 1 :(得分:0)
如果要访问id,请使用该URL,将其作为另一个参数传递给您的函数。但似乎您可能希望将Project实体与该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()
}
}