Symfony Admin Generator Doctrine executeCreate

时间:2011-01-18 17:53:49

标签: symfony1 doctrine admin symfony-1.4

感谢您对此提供的任何帮助,我对Symfony框架非常陌生,所以只是试着了解它。

我希望能够从管理区域拦截提交的表单并修改数据。

这是我到目前为止所得到的(基本形式)..

/apps/backend/modules/proposition/actions/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);
  }

}

我的表单确实包含名称字段:

/apps/backend/modules/proposition/config/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 个答案:

答案 0 :(得分:2)

我认为你在正确的轨道上彼得,但修改$request为时已晚,因为它没有任何效果。

您可以在the "doClean" part of the Form's validator中对入站数据进行此类修改。

或者,如果您要进行特殊处理,则覆盖生成的processForm()函数可能更有意义。只需将其从cache/frontend/dev/modules/autoProposition/actions/actions.class.php复制到您的apps/backend/modules/proposition/actions/action.class.php并开始黑客攻击。

答案 1 :(得分:2)

为什么要在你的行动中做到这一点?我认为最合适的地方就是形式本身。

您可以通过添加update * Column方法修改任何列的值:

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

注意:如果您不希望在其他地方添加“是一个白痴”字符串,您可以使用您的表单子类,并在那里添加您的方法(即在AdminPropositionForm中)。

您可以通过在模块的配置类(propositionGeneratorConfiguration)中重载getFormClass()方法来更改与admin生成的模块一起使用的表单。它应该返回您要使用的表单类的名称。

注2:您必须以不同方式访问表单值:

$proposition = $request->getParameter('proposition', array());
$name = $proposition['name'];