Я использую Symfony и Doctrine для создания форм для своих CMS. В последнее время я настраивал их, задавая значения по умолчанию на основе определенных параметров URL.
Например, у меня есть две модели: PollQuestion
и PollChoice
. PollChoice
имеет отношение к PollQuestion
с помощью поля poll_question_id
. Форма PollChoice
имеет выпадающий список, в котором перечислены все доступные PollQuestion
, к PollChoice
может быть прикреплен PollChoice
. У меня также есть два маршрута: pollchoices/new
и poll/:poll_id/choice/new
. Оба маршрута отображают PollChoiceForm
, но, используя 2-й маршрут, вы автоматически увидите всплывающее окно PollQuestion, установленное на параметр :poll_id
URL. Я делаю это, просто изменяя значение по умолчанию виджета выпадающего списка в классе PollChoiceForm
, выбирая значение :poll_id
из объекта запроса.
Мой вопрос двоякий:
1) Я в настоящее время sfContext::getInstance()->getRequest()
объект запроса с помощью sfContext::getInstance()->getRequest()
. Я знаю, что sfContext::getInstance()
нахмурился, но я не смог найти другой способ его извлечения. Есть ли другой способ? Инъекция зависимостей кажется хорошим способом, но я не знаю, как это сделать, не делая много взлома (чего я бы хотел избежать).
2) Могу ли я полностью изменить неправильный способ изменения значений формы по умолчанию на основе параметров URL?
Всякий раз, когда мне нужен контекст в форме, я делаю это через инъекцию конструктора.
в действии:
$this->form = new WhateverForm($whatever, array("context" => $this->getContext()));
в виде:
$this->getOption("context");