Предварительно заполните виджет формы параметром URL (symfony) - PullRequest
1 голос
/ 22 ноября 2010

Все в названии.

Я получаю параметр URL:

$log = $request->getParameter('logement');

Заявление виджета:

$this->widgetSchema['logement'] = new sfWidgetFormInputText();

И я передаю его в форме, чтобы предварительно заполнить мой виджет 'logement':

$this->form = new bailForm(array('logement' => $log));

Я прочитал это в документации Symfony, но, когда я делаю это, у меня появляется эта ошибка:

The "BailForm" form only accepts a "Bail" object.

Я уже перепробовал много вещей, найденных в Интернете, но никто не работает.

EDIT

ОРМ - это доктрина «Ложемент» является атрибутом «Залога»

РЕДАКТИРОВАТЬ 2

Я пробовал:

$log = $request->getParameter('logement');

$this->form = new bailForm(null, array('logement' => $log));

У меня нет ошибки, но мой виджет "logement" не заполнен ...

Ответы [ 4 ]

3 голосов
/ 23 ноября 2010

Один из двух способов:

1.Если вы хотите проверить Logement

$form = new BailForm(); //BailForm must have Logement validator set
$form->bind(array('logement' => $log) + $otherRequestParameters);
$form->updateObject(); //or save

2.Если вы просто хотите, чтобы Logement был установлен на объекте

$bail = new Bail();
$bail->Logement = $log;
$form = new BailForm($bail);
1 голос
/ 22 ноября 2010

Ваша форма является формой движения или доктрины, первым параметром конструктора должен быть экземпляр связанного объекта.Попробуйте это:

$this->form = new bailForm(null, array('logement' => $log));
0 голосов
/ 02 июня 2012
class QuestionsForm extends BaseForm
{

  private static $email;


  public static function setEmail($set) { self::$email = $set; }
  public static function getEmail() { return self::$email; }

  public function configure()
  {   

      $this->setDefault('email', self::$email); 
      //$this->setDefault('email', 'testemail'); 

      //rest of the form setup code
  }

}

Вот класс действий

class questionsActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {

    $this->email = $this->getRequestParameter('email');

    QuestionsForm::setEmail($this->email);
    //die(QuestionsForm::getEmail());
    $f = new QuestionsForm();

    $this->form = $f;
0 голосов
/ 22 ноября 2010

Формы, автоматически генерируемые на основе классов модели (в данном случае BailForm для Bail), имеют тип sfFormObject и, таким образом, принимают только параметры типа, соответствующего классу модели.

Наивным решением является объявление пользовательского конструктора для типа BailForm, который принимает массив в качестве единственного параметра (или массив и объект типа Bail).

Однако это не очень хорошая практика, поскольку модельные формы предназначены только для работы с модельными классами. Этот logement параметр - каково его значение по отношению к Bail объекту? Возможно, если вы зададите себе этот вопрос, вы можете придумать более подходящий дизайн, который, вероятно, включает logement в качестве атрибута Bail.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...