作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义 FormType,当父 Form 存在时,它需要将自己添加到父实体中。
在 Symfony < 2.3 中,这可以通过执行以下操作来完成:
class FooType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
...
$builder->getParent()->addEventSubscriber(new FooSubscriber)
}
}
class FooSubscriber implements EventSubscriberInterface
{
static function getSubscribedEvents()
{
return array(
FormEvents::POST_SUBMIT => 'postSubmit'
);
}
}
$builder->getParent()
已被删除。但现在我不能听 parent 提交。
function postSubmit(FormEvent $e)
{
if ($e->getForm()->getParent()->getRoot()->isValid()) {
//this gives 'false'
// Symfony\Component\Form\Form.php @ line 744
public function isValid()
{
if (!$this->submitted) {
return false;
}
$this->submitted = true
之前就其本身...我不确定 parent 是否有效。
最佳答案
我需要相同的功能,因为我有一个自定义表单字段,在更新所有映射字段后需要父实体。不幸的是,子表单的 POST_SUBMIT 在父表单上的 SUBMIT 运行之前被调用。
我最终将 eventDispatcher 传递给了 child ,并将我的听众绑在那里。我需要两个监听器来完成工作:一个用于获取处理后的值,另一个用于更新主实体。通过引用将 $generatedPassword 传递给闭包允许您将数据从子事件共享给父事件。
父::buildForm
$builder->add('generate_password', GeneratePasswordType::class, [
'event_dispatcher' => $builder->getEventDispatcher(),
]);
//first listed to submit even to get current field value
$generateNewPassword = false;
$builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) use (&generateNewPassword) {
$generateNewPassword = null !== $event->getData();
});
//then run updater after parent entity has been updated
$parentDispatcher = $options['event_dispatcher'];
$parentDispatcher->addListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use (&$generateNewPassword) {
$user = $event->getData();
if(true === $generateNewPassword){
//update password & email user new credentials
}
}
关于forms - Symfony2 (>= 2.3) : How to listen to parent form event from child?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27902462/
我是一名优秀的程序员,十分优秀!