Symfony 管理生成器 Doctrine 执行创建

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个回答

2
我认为你是在正确的轨道上,Peter,但是修改请求($request)太晚了,以至于它没有任何效果。
你可以在表单验证器中的“doClean”部分进行入站数据的这种修改。
或者,如果你有特殊的处理要做,重写生成的processForm()函数可能更有意义。只需将其从cache/frontend/dev/modules/autoProposition/actions/actions.class.php复制到apps/backend/modules/proposition/actions/action.class.php中并开始修改即可。

谢谢Nathan,processForm()正是我在寻找的函数。我已经扩展了它,现在它按照我的要求工作。我一直在想autoPropositionActions类住在哪里,看到这个让我有更多的东西可以玩 :) - Peter Hough
如何更改processform中字段的值的语法?我正在尝试将author_id设置为当前登录用户的ID... - Manu
@Manu 看起来你已经在你关于这个问题的提问上得到了帮助。祝你好运。 - Nathan

2

为什么你想在动作中执行此操作?我认为最合适的地方是表单本身。

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

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

注意:如果您不希望在表单的其他位置添加“是个白痴”的字符串,您可以对原始表单进行子类化,并在其中添加您的方法(即在AdminPropositionForm中)。

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

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

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

2
谢谢kuba,你的第二条注释很有帮助。虽然一旦我扩展了processForm()函数,我就像这样使用它:$parms = $request->getParameter($form->getName()); $name = $parms['name']; - Peter Hough
@Peter:你说得对。使用 $form->getName() 比直接使用名称更好。 - Jakub Zalas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接