Как получить объект с его переводом, используя getRoute в Symfony? - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть несколько моделей с переводами. Когда я загружаю

$this->tour = $this->getRoute()->getObject();

В качестве примера, я получаю тур объект. Однако он не присоединяется к таблице tour_translation; поэтому, когда после я пытаюсь получить его название; Symfony делает еще один SQL-запрос.

Как я могу что-то переопределить, поэтому в модели Tour, когда я запрашиваю объект, он возвращает мне объект с его переводом в текущей культуре.

Я смотрю на класс sfObjectRoute , чтобы узнать, могу ли я переопределить какой-либо метод, но я не уверен прямо сейчас

Я знаю, что могу сделать следующее, но я предпочитаю первый вариант, так как он более прозрачный и элегантный:

$this->tour = Tour::getTour($request->getParameter('id'), $lang);

спасибо!

1 Ответ

2 голосов
/ 11 февраля 2010

Вам необходимо указать в определении маршрута, какой метод использовать при получении объекта с помощью опции method:

my_route
  url: /tour/:id
  options:
    model: Tour
    type: object
    method: getTourForRoute

(params раздел для краткости пропущен)

Имейте в виду, что метод не получит id напрямую в качестве параметра, а будет массив параметров, переданных на маршрут, поэтому вы должны написать такой метод:

public function getTourForRoute($parameters)
{
  return self::getTour($parameters['id']);
}

Последнее замечание: эта опция доступна, только если вы используете sfDoctrineRoute или sfPropelRoute: -)

...