URL может быть сгенерирован в контроллере, чтобы отделить модель от вида. Но это только первый шаг. Лучший способ - отделить модель, просмотр и маршрутизацию. Я думаю, что лучший способ - использовать помощник вида, который генерирует путь. Я изменил некоторые рамки для проекта (отказ от symfony). Это проще, когда проект использовал шаблон (например, Smarty или Twig)
Посмотрите расширения Symfony Twig, чтобы иметь пример, который разделяет создание пути и контроллер.
В качестве примера, Twig предназначается метод пути. This view helper выполняет поиск маршрута URL-адреса маршрута. Он не имеет никакого отношения к контроллеру или модели.
Путь: Возвращает относительный URL (без схемы и хоста) для данного маршрута . Если относительный параметр включен, он создаст путь относительно текущего пути .
Как вы можете видеть там, вы должны быть осторожны с именем маршрута.
/**YourController**/
/**
* @Route("/foo", name="new-game", methods="get")
*
* @return Response
*/
public function myFooAction()
{
//Your code
//The rendering without information about his own or other path
return $this->render('default/foo.html.twig', []);
}
И соответствующий путь в Twig:
<hr>
<a href="{{ path('foo') }}" title="Alt">Some text</a>
<br>
На этот вопрос нет ответа, это зависит от вас, чтобы определить предел между логикой и представлением. –
Плохой запах? Скажите это реакционерам-разработчикам;) – Timurib
Согласен. URL-адрес должен быть сгенерирован в контроллере, а не в представлении. Представление предназначено только для вывода не для какой-либо логики. разделение проблем. –