symfony2路由参数和请求

时间:2014-07-06 17:56:10

标签: symfony

我有这条路线

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

有关解决方法的任何建议吗? 非常感谢

2 个答案:

答案 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()
    }
}