Я использую 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");