Передача значений из класса действий в класс модели в Symfony - PullRequest
1 голос
/ 17 марта 2010

У меня есть класс действий для сохранения некоторых данных в базу данных. В классе действий я получаю идентификатор через URL.

Я получаю идентификатор по $ request-> getParameter ('id')

Я использовал этот код для сохранения

$ this-> форма-> Bind ($ request-> getParameter ( 'question_answers')); if ($ this-> form-> isValid ()) {
$ This-> форма-> Save (); $ This-> перенаправлять ( '@ домашнюю'); }

в классе модели я использовал метод сохранения с переопределением, чтобы сохранить дополнительное поле

открытая функция сохранения (Doctrine_Connection $ conn = null) { if ($ this-> isNew ()) {

$now=date('Y-m-d H:i:s', time());
$this->setPostedAt($now);

} вернуть parent :: save ($ conn); поэтому я хочу получить значение id здесь. Итак, как я могу передать значение идентификатора из класса действий в класс модели

любой другой способ сохранить идентификатор в самом классе действия Заранее спасибо

Ответы [ 5 ]

1 голос
/ 17 марта 2010

Просто используйте

$ this-> форма-> GetObject () -> setQuestionId ($ request-> getParameter ( 'ID')); $ This-> форма-> Save ();

QuestionId = имя поля

$ request-> getParameter ('id') = является значением по умолчанию

0 голосов
/ 08 июня 2010

Вы можете использовать (sfUser) -> setFlash и (sfUser) -> getFlash вместо setAttribute, это более безопасно ...

0 голосов
/ 17 марта 2010

Если в вашей модели уже есть поле для этого идентификатора (например, в вашем примере posts_id), то вы можете сделать одну из 2 вещей:

1: Передайте идентификатор в форму при ее создании, как вариант:

$this->form = new MyForm(array(), array("posted_id" => $id));

и затем вы можете переопределить метод doSave () вашей формы, чтобы установить поле:

// ...
$this->getObject()->posted_id = $this->getOption("posted_id");
// ...

или аналогичный

2: Добавьте виджет к вашей форме в методе configure () с соответствующим валидатором и передайте идентификатор, когда вы получите значения из запроса:

$values = $request->getParameter('question_answers');
$values["posted_id"] = $request->getParameter("id");
$this->form->bind($values);

Если вы визуализируете форму вручную, просто не отображайте это новое поле в шаблоне представления.

В любом случае, сохранение модели в результате сохранения формы будет включать это новое поле, я полагаю. Второй из памяти, но он должен работать технически ...: -)

0 голосов
/ 17 марта 2010

Лучшая практика, которую я использую, состоит из 2 шагов:

  1. Передать дополнительные данные в параметры форм (параметр 2-го конструктора или просто $form->setOption('name', 'value'));
  2. метод защиты от переопределения doUpdateObject следующим образом:

    protected function doUpdateObject($values)
    {
      $this->getObject()->setFoo($this->getOption('foo'));
      parent::doUpdateObject($values);
    }
    

Наслаждайтесь!

0 голосов
/ 17 марта 2010

Скорее всего, не лучшее решение, но вы можете сохранить это значение идентификатора в переменной сеанса и использовать его позже в любом месте, где вам нужно. что-то вроде:

$this->getUser()->setAttribute('id', $request->getParameter('id')); // in action class

и

sfContext::getInstance()->getUser()->getAttribute('id'); // in model class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...