这段代码不符合我的意图。
在最后一行,我为$ entity设置了一个值,期望它在添加了这个手动formError之后更改用户被发送回的editForm的值。
但是我意识到用户面临的editForm与前一个请求已绑定的editForm相同(这就是你想要的,因为其他值可能已被更改,我们允许更改的值)。
现在是否可以将值设置为editForm,如$ editForm-> setWidth()或类似的东西来完成我需要的东西?
$originalEntity = clone $entity;
$editForm = $this->createForm(new ContainerType($tempCompany), $entity);
$request = $this->getRequest();
$editForm->bind($request);
//if container is a screen user is not allowed to change resolution
if ( !$entity->getIsGroup() && ( $entity->getWidth() != $originalEntity->getWidth() || $entity->getHeight() != $originalEntity->getHeight() ) ) {
$error = new FormError("Eftersom detta är en skärm och ingen grupp tillåts du inte ändra upplösningen, detta kan endast göras av cloudsign support (som konfigurerat skärmen).");
$editForm->get('width')->addError($error);
$entity->setWidth($originalEntity->getWidth());
$entity->setHeight($originalEntity->getHeight());
}
答案 0 :(得分:0)
使用Form Events。具体来说,PRE_SUBMIT
事件。您可以创建类似ContainerScreenSubscriber
的类,其中包含Symfony\Component\EventDispatcher\EventSubscriberInterface
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ContainerScreenSubscriber implements EventSubscriberInterface
{
/**
* @return array
*/
public static function getSubscribedEvents() {
return array(FormEvents::PRE_SUBMIT => 'preSubmit');
}
/**
* @param \Symfony\Component\Form\FormEvent $event
*/
public function preSubmit(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
// do your checks and manipulate the form data here
}
}
在您的表单类型
中$builder->addEventSubscriber(new ContainerScreenSubscriber());
希望有所帮助。我相信还有很多其他方法可以实现这一目标。