параметры маршрутизации symfony2 и запрос

#symfony

#symfony

Вопрос:

У меня есть этот маршрут

 edit_project:
    pattern:  /edit/{id}
    defaults: { _controller: CpjProjectsBundle:Project:edit }
    requirements:
        id: d 
  

и это контроллер:

 public function editAction(Request $request)
{

}
  

внутри контроллера я не могу получить идентификатор

 $this->query->get('id'); //empty
  

если я изменю сигнатуру метода, это сработает:

 public function editAction($id)
  

но мне нужен запрос для обработки формы, обычно таким образом

 $form->handleRequest($request);
  

есть предложения по обходному пути?
большое спасибо

Ответ №1:

Ваш окончательный URL выглядит следующим образом: http://my.domain.com/edit/123 таким образом, в URL отсутствует часть запроса ( ...?id=123 ). Вы должны принять оба Request объекта и id в качестве аргументов вашей функции:

  public function editAction(Request $request, $id)
 {
     var_dump($request, $id);
 }
  

Ответ №2:

Используя этот URL, если вы хотите получить доступ к идентификатору, вы передадите его в качестве другого параметра вашей функции. Но, похоже, вы можете захотеть получить объект Project, связанный с этим идентификатором. Вы можете сохранить шаг в своем контроллере и попросить symfony просмотреть его для вас по типу, указывающему на $id переменную, например:

 <?php
namespace CpjProjectsBundleController;

use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationRequest;
use CpjProjectsBundleEntityProject;
//Other use statements

class PrjectController extends Controller
{

    public function editAction(Request $request, Project $id)
    {
        var_dump($id);
        // This will be and instance of CpjProjectsBundleEntityProject
        //if you need the actual ID of it you can do the following
        $realID = $id->getId()
    }
}