Symfony Admin Generator Doctrine выполнитьСоздать - PullRequest
4 голосов
/ 18 января 2011

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

Я хочу иметь возможность перехватить отправленную форму из административной области и изменить данные.

Вот что я получил (в базовой форме) ..

/ приложений / бэкенд / модули / предложение / действия / action.class.php

class propositionActions extends autoPropositionActions {

  public function executeCreate(sfWebRequest $request) {
    // modify the name
    $name = $request->getParameter('name');
    $name = $name . ' is an idiot';
    $request->setParameter('name', $name);

    return parent::executeCreate($request);
  }

}

Моя форма содержит поле имени:

/ приложение / бэкэнд / модули / предложения / конфигурация / generator.yml

generator:
  class: sfDoctrineGenerator
  param:
    model_class:           Proposition
    theme:                 admin
    non_verbose_templates: true
    with_show:             false
    singular:              ~
    plural:                ~
    route_prefix:          proposition
    with_doctrine_route:   true
    actions_base_class:    sfActions

    config:
      actions: ~
      form:
        display: [name, icon, overview, published]

Я не уверен, что это файл, который вам нужно увидеть, но это определенно в HTML:

<input type="text" id="proposition_name" name="proposition[name]">

Когда я отправляю форму, она просто сохраняет мое имя. Я хочу, чтобы это сохранило мое имя, добавив «идиот».

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 19 января 2011

Почему вы хотите сделать это в вашем действии? Я думаю, что наиболее подходящим местом является сама форма.

Вы можете изменить значение любого столбца, добавив обновление * Метод столбца:

class PropositionForm extends BasePropositionForm
{
  public function updateNameColumn($name)
  {
    return $name . ' is an idiot';
  }
}

Примечание: Если вы не хотите, чтобы строка "is idiot" добавлялась в других местах, где используется ваша форма, вы можете создать подкласс исходной формы и добавить туда свой метод (т. Е. В AdminPropositionForm).

Вы можете изменить форму, используемую с модулем, сгенерированным администратором, перегрузив метод getFormClass () в классе конфигурации вашего модуля (prositionGeneratorConfiguration). Он должен вернуть имя класса формы, который вы хотите использовать.

Примечание 2: Вы должны получить доступ к значениям формы по-разному:

$proposition = $request->getParameter('proposition', array());
$name = $proposition['name'];
2 голосов
/ 18 января 2011

Я думаю, что вы на правильном пути, Питер, но слишком поздно изменили $request, чтобы иметь какой-либо эффект.

Вы можете выполнить такое изменение входящих данных в части doClean средства проверки формы .

Или, если у вас есть специальная обработка,может иметь больше смысла переопределить сгенерированную функцию processForm().Просто скопируйте его из cache/frontend/dev/modules/autoProposition/actions/actions.class.php в свой apps/backend/modules/proposition/actions/action.class.php и начните взламывать.

...