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