Форма администратора с "дополнительными" полями - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть форма для объекта с именем AccountImport.Эта форма живет в модуле, созданном администратором.В дополнение к полям, которые отображаются непосредственно в атрибуты этого объекта, мне понадобится пара дополнительных полей.

Если я просто добавлю поля в форму AccountImport, она не будет сохранена правильно, поскольку форма не будетбольше соответствует объекту AccountImport.

Если я создаю шаблон вручную и склеиваю дополнительные поля таким образом, я отбрасываю все то, что дает мне админ-генератор бесплатно (т.е. форматирование,в список ", сохранить кнопки).

Что такое" хороший "способ сделать то, что я пытаюсь сделать?

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Если вы определили дополнительные поля в generator.yml, вы можете переопределить одно из действий генератора администратора, чтобы обрабатывать поля так, как вы хотите.

Посмотрите на сгенерированный actions.class.php в кэше / YOURAPP / YOURENV / modules / autoYOURMODULE / actions / actions.class.php . Вы можете переопределить любую из этих функций своими собственными в apps / YOURAPP / modules / YOURMODULE / actions / actions.class.php , поскольку она наследуется из этого кэшированного файла. Когда вы вносите изменения в generator.conf , кэшированный файл обновляется, но ваш код все равно переопределяет его. Вы, вероятно, хотите переопределить processForm().

У меня есть пример этого на шаге 5 в этом сообщении в блоге :

protected function processForm(sfWebRequest $request, sfForm $form)
{
  $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));

  if ($form->isValid())
  {
$notice = $form->getObject()->isNew() ? 'The item was created successfully.' : 'The item was updated successfully.';

// NEW: deal with tags
if ($form->getValue('remove_tags')) {
  foreach (preg_split('/\s*,\s*/', $form->getValue('remove_tags')) as $tag) {
    $form->getObject()->removeTag($tag);
  }
}
if ($form->getValue('new_tags')) {
  foreach (preg_split('/\s*,\s*/', $form->getValue('new_tags')) as $tag) {
    // sorry, it would be better to not hard-code this string
    if ($tag == 'Add tags with commas') continue;
    $form->getObject()->addTag($tag);
  }
}

try {
  $complaint = $form->save();
  // and the remainder is just pasted from the generated actions file

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

0 голосов
/ 13 декабря 2010

Я полагаю, вы добавили дополнительные поля в качестве виджетов к объекту формы, но также добавили их валидаторы?

Независимо от того, какие поля формы вы включаете в объект формы, при условии, что файл generator.yml не переопределяет параметры формы (т. Е. Вы не устанавливаете никакого значения для клавиши [new|form|edit].display в этом файле ) объект должен быть успешно сохранен на допустимом вводе.

...