感谢您对此提供的任何帮助,我对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]">
当我提交表单时,它只保存我的名字。我希望它保存我的名字,附加'是一个白痴'。
非常感谢
答案 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'];