我已经从字面上尝试了所有尝试并扩展Symfony2 Form类的东西。我只是不能扩展Symfony2 Form类。试了一下
我想添加一个新的方法来形成并调用它的控制器:
$form = $this->createForm($this->get('my_form_service'), $entity);
$form->myNewMethod();
因为Form类没有被定义为一个服务和其他类实例化(FormBuilder,线221)那么我看不到我能做什么。我不想破解核心。
我可以扩展控制器类,例如,在的CreateForm()方法返回实例化的Form对象:
// Extend Controller and do something with Form before returning
public function createForm($type, $data = null, array $options = array())
{
return $this->container->get('form.factory')->create($type, $data, $options);
其实How to add a new method to a php object on the fly?显示了如何能做到以上并加入我的新方法,这种方式,但我的理解是,你需要至少__call添加到表单类 - 我不能做 - 或者添加的方法将不能使用$ this(我需要)。
我只需要在控制器中使用表单时添加此项。我不需要它进行任何CLI处理。
任何想法如何我可以添加一个方法的Form类没有黑客的核心?
============================================== ======================
编辑:我为什么要这样做?
如果满足某个条件,我想'默默失败'表单提交。我认为,要做到这一点的最好办法是做这样一个控制器:
if ($form->isValid()) {
if ($form->requiresSilentFail()) {
// Silently fail
} else {
// As normal, add to DB etc.
}
}
我想我可以做这样的事情:
if ($form->isValid()) {
if ($this->get('check_my_form')->requiresSilentFail($form)) {
// Silently fail
} else {
// As normal, add to DB etc.
}
}
....但我也需要首先在Form :: handleRequest()中执行一些额外的逻辑,所以我相信扩展Form是唯一的选择。
我不是对Symfony非常熟悉,但是如果你想扩展类,你可以通过继承它们(除非它们被声明为final,很少做)。难道你不能'类MyForm扩展SymfonyForm'? – GordonM 2014-09-29 15:51:42
子类也是form.factory服务,并用你自己的类替换Form的实例。 – user3557327 2014-09-29 16:25:59
我想你应该用FormEvents或Validator组件来处理 – 2014-09-30 12:24:14