Задать вопрос

Symfony 2.5: как сгенерировать url в модели?

Добрый день.

Подскажите, как мне сгенерировать url строку в методе модели? Во всех примерах это делается в контроллере. В гугле по своему вопросу ничего не гашел. Было решение, но оно работало только на старых версиях фремворка.

Подскажите, как получить достеп к роутеру из модели?
  • Вопрос задан
  • 2596 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
сделать модель сервисом (внедрить контейнер или роутер), но сразу скажу что это неправильный подход генерить в модели ссылки и т.д., в модели должна быть только логика работы с базой данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Решал двумя способами:

1. RoutableInterface с методами getRouteName и getRouteParameters. Для твига написал свою обертку над path, которая использовала эти методы{{ object_path(entity) }}

2. Свой генератор роутов с примерно таким кодом:

$compiledRoute = $route->compile();
$variables = $compiledRoute->getVariables();

$parameters = array();
if (!empty($variables)) {
    foreach ($variables as $variable) {
        $parameters[$variable] = $this->getObjectProperty($object, $variable);
    }
}

return $this->router->generate($name, $parameters);


В итоге использую как {{ object_path('route_name', entity) }} Все необходимые параметры возьмутся из модели. Удобно для CRUD
Ответ написан
Комментировать
@faost
Пожалуйста, не надо генерить роуты в модели! Генерите роуты там, где вы используете эти модели.
  • Если это контроллер, то $this->generateUrl()
  • В твиге {{ path() }}
  • В костомном сервисе ставьте зависимость от "router" или от всего контейнера (хуже) и юзайте $this->router->generate()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы