В объектах решение: (new и $ this)

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

На сгенерированных страницах администрирования для сообщения в блоге у меня есть раскрывающийся список авторов, в котором указывается идентификатор author_id.

Я хотел бы скрыть этот раскрывающийся список и установить для author_id идентификатор текущего вошедшего в систему пользователя при создании сообщения (но не при его редактировании)

Как я могу это сделать?

редактировать Я пробовал те:

$request->setParameter(sprintf("%s[%s]", $this->form->getName(), "author_id"), $this->getUser()->getAttribute("user_id"));
$request->setParameter("content[author_id]", $this->getUser()->getAttribute("user_id"));
$request->setParameter("author_id", $this->getUser()->getAttribute("user_id"));
$request->setParameter("author_id", 2);
$request->setParameter("content[author_id]", 2);
$request->setParameter("author_id", "2");
$request->setParameter("content[author_id]", "2");

В processForm () и executeCreate ()

Решено!

Окончательный код:

  public function executeCreate(sfWebRequest $request)
  {
    $form = $this->configuration->getForm();
    $params = $request->getParameter($form->getName());
    $params["author_id"] = $this->getUser()->getGuardUser()->getId();;
    $request->setParameter($form->getName(), $params);

    parent::executeCreate($request);

  }
 Manu21 янв. 2011 г., 18:37
Я не могу поверить, как трудно найти информацию об этом. Я первый, кто хочет сохранить автора документа?

Ответы на вопрос(3)

значение с атрибутом sfUser (который определяется при входе пользователя в систему)

переопределить executeCreate () и установить виджет author_id (спасибо maerlyn: D)

public function executeCreate(sfWebRequest $request){
  parent::executeCreate($request);
    $this->form->setWidget('author_id', new sfWidgetFormInputHidden(array(),array('value'=>$this->getUser()->getAttribute('author_id'))) );
}
 Manu20 янв. 2011 г., 23:49
а остальное действительно? $ this-> setWidget ('author_id', новый sfWidgetFormInputHidden (array (), array ('value' => 1))) в порядке?
 Maerlyn20 янв. 2011 г., 07:23
С помощьюsfContext::getInstance() это плохая практика. Используйте внедрение зависимостей. Предлагаемое чтение:webmozarts.com/2009/07/01/why-sfcontextgetinstance-is-bad
 Manu21 янв. 2011 г., 17:38
$ this-> form-> setWidget ПОСЛЕ parent :: executeCreate ??
 HQM21 янв. 2011 г., 04:08
это верно, но, как уже упоминал Маерлин, это крайне не рекомендуется ..: D
 Jakub Zalas20 янв. 2011 г., 22:18
Как и полагает Мэрлин, использование контекста - плохая практика. Просто передайте author_id в форму в качестве опции.
Решение Вопроса

executeCreate функция в файле действий. При привязке данных публикации к форме, вставьте в нее идентификатор текущего пользователя.

2-е обновление

Я провел некоторые эксперименты, и это работает:

class fooActions extends autoFooActions
{
  public function executeCreate(sfWebRequest $request)
  {
    $form = $this->configuration->getForm();
    $params = $request->getParameter($form->getName());
    $params["author_id"] = 123;
    $request->setParameter($form->getName(), $params);

    parent::executeCreate($request);
  }
}
 Manu22 янв. 2011 г., 12:24
Спасибо; это все еще не в состоянии сохранить, говоря, что author_id требуется .. Я постараюсь сделать это дополнительным.
 Manu21 янв. 2011 г., 00:24
Это кажется хорошей идеей; не могли бы вы подробнее рассказать об этом?
 Maerlyn21 янв. 2011 г., 19:00
@Manu Я обновил свой ответ
 Manu21 янв. 2011 г., 18:35
не работал .. :(
 Manu21 янв. 2011 г., 17:56

(new и $ this)

class fooActions extends autoFooActions
{
  public function executeCreate(sfWebRequest $request)
  {
    $this->form = new XxxxxForm();
    $params = $request->getParameter($this->form->getName());
    $params["author_id"] = 123;
    $request->setParameter($this->form->getName(), $params);

    parent::executeCreate($request);
  }
}

Ваш ответ на вопрос