Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
symfony2路由参数和请求_Symfony - Fatal编程技术网

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