EDIT。总结:我只是想让SomeForm扩展我的DoctrineForms而不包含某些字段。它们不可编辑。我想在代码中设置的固定值。希望这应该是足够的信息,你不需要阅读这篇文章的其余部分......
你好。这是我的情况:我想知道的是,做到这一点的“正确”方法是什么?我可以想出几种方法来破解它,但无论我做什么感觉都是一种尴尬的解决方法。
有没有正确的方法来扩展我的Form类(BaseFormDoctrine)或其他合适的地方?
编辑:正如下面的评论所指出的,我实际上使用的是doctrine:generate-module,它显然不同于“CRUD”。另外:虽然我还没有理想地解决这个问题,但我想我知道解决方案的所在,我只需要深入研究symfony形式: http://www.symfony-project.org/forms/1_4/en/02-Form-Validation
答案 0 :(得分:3)
在/ lib / form文件夹中创建另一个表单,扩展您的普通表单,然后覆盖相应的字段。以下将从表单中删除该字段,以便它根本不显示。
<?php
class FrontendSomeModelForm extends SomeModelForm {
public function configure()
{
unset($this["some_field"]);
}
}
或者,如果您想要渲染值,但不允许对其进行编辑,则可以执行以下操作:
<?php
class FrontendSomeModelForm extends SomeModelForm {
public function configure()
{
$this->setWidget("some_field", new sfWidgetFormPlain());
}
}
然后创建一个sfWidgetFormPlain
窗口小部件,只输出值并将其粘贴到symfony可以找到的位置(lib / form / widget或其他东西)。
<?php
class sfWidgetFormPlain extends sfWidgetForm
{
/**
* Constructor.
*
* @param array $options An array of options
* @param array $attributes An array of default HTML attributes
*
* @see sfWidgetForm
*/
protected function configure($options = array(), $attributes = array())
{
$this->addOption('value');
}
/**
* @param string $name The element name
* @param string $value The value displayed in this widget
* @param array $attributes An array of HTML attributes to be merged with the default HTML attributes
* @param array $errors An array of errors for the field
*
* @return string An HTML tag string
*
* @see sfWidgetForm
*/
public function render($name, $value = null, $attributes = array(), $errors = array())
{
//optional - for easy css styling
$attributes['class'] = 'plain';
return $this->renderContentTag('div', $value, $attributes);
}
}
然后,您可以使用此表单而不是正常表单来表示您不希望能够编辑的表单。检查symfony文档以了解如何执行此操作,具体取决于您是在模块中还是通过管理生成器显示它。