Может ли это сработать для создания форм в Symfony 1.4? - PullRequest
0 голосов
/ 30 сентября 2011

В настоящее время я пытаюсь создать элементы формы в Symfony на основе модели приложения.Я знаю, что приведенный ниже код недействителен, но я надеюсь, что он показывает, что я пытаюсь сделать.Я действительно ударил его об стену ... Кажется, я не могу понять, как использовать библиотеку форм для этого.

$formElementArray = FormElementsTable::getInstance()->getElementList($advertiserID);
$formElements = array();
foreach ($formElementArray as $formElement)
{
  $formElements['name'] . => new sfWidgetForm.$formElements['type'] . (array('label' => $formElements['label'])),
}

$this->setWidgets(array($formElements));

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

Спасибо за любой вклад.

edit: немного большеинформация ...

Цель состоит в том, чтобы иметь возможность заполнять форму любыми элементами, которые появляются в определенной строке базы данных.Например, возможно, рекламодателю X нужно поле имени, пола и цвета волос, а рекламодателю - поле имени, пола, веса и цвета глаз.Мне нужно иметь возможность создавать их на лету, в идеале с доступными функциями форм Symfony.

Решение

Вот как конфигурируется форма ...

public function configure()
{

  $elements = Doctrine_Core::getTable('FormFields')->getElementsById(0);

  foreach ( $elements as $element )
  {
    $widgetName = $this->getWidgetName($element);
    $args = $this->getConstructorArguments($element);
    $widgets[$element->name] = new $widgetName($args);

    $validatorName = 'sfValidatorString';
    $validators[$element->name] = new $validatorName(array('required' => false));
  }


  $this->setWidgets($widgets);

  $this->setValidators($validators);

}

Просто, верно?Я не должен был слишком много думать об этом.

Ответы [ 2 ]

4 голосов
/ 01 октября 2011

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

UPDATE

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

1 голос
/ 01 октября 2011

Если вы намереваетесь хранить данные, отправленные при заполнении пользовательской формы (не формы), то я думаю, что вам следует использовать систему NoSQL, поскольку ваша схема динамическая (она меняется при изменении рекламодателя).Прочитайте этот пост , чтобы узнать о них больше.Также прочитайте этот пост , чтобы узнать, что можно использовать с Symfony.

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