大佬教程收集整理的这篇文章主要介绍了symfony-2.1 – 表单:避免将null设置为非提交的字段,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class Collection { public $page; public $limit; }
和表单类型:
class CollectionType extends AbstractType { public function buildForm(FormBuilderInterface $builder,array $options) { $builder->add('page','Integer'); $builder->add('limit','Integer'); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'FSC\Common\Rest\Form\Model\Collection',)); } }
我的控制器:
public function getUsersAction(request $request) { $collection = new Collection(); $collection->page = 1; $collection->limit = 10; $form = $this->createForm(new CollectionType(),$collection) $form->bind($request); print_r($collection);exit; }
当我POST / users /?form [page] = 2& form [limit] = 20时,响应是我所期望的:
Collection Object ( [page:public] => 2 [limit:public] => 20 )
现在,当我POST / users /?form [page] = 3时,响应为:
Collection Object ( [page:public] => 3 [limit:public] => )
limit变为null,因为它未提交.
我想得到
Collection Object ( [page:public] => 3 [limit:public] => 10 // The default value,set before the bind )
问题:如何更改表单行为,以便忽略未提交的值?
route_name: pattern: /users/?form[page]={pagE}&form[limit]={limit} defaults: { _controller: CompanyNameBundlename:ControllerName:ActionName,limit:10 }
另一种方法可以是使用钩子(即PRE_BIND)并将该值手动更新到此事件中.通过这种方式,您没有将“逻辑”扩展到多段代码中.
最终代码 – 由Adrien建议 – 将是
<?php use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Form\FormEvents; class IgnoreNonSubmittedFieldSubscriber implements EventSubscriberInterface { private $factory; public function __construct(FormFactoryInterface $factory) { $this->factory = $factory; } public static function getSubscribedEvents() { return array(FormEvents::PRE_BIND => 'preBind'); } public function preBind(FormEvent $event) { $submittedData = $event->getData(); $form = $event->getForm(); // We remove every child that has no data to bind,to avoid "overriding" the form default data foreach ($form->all() as $name => $child) { if (!isset($submittedData[$name])) { $form->remove($Name); } } } }
以上是大佬教程为你收集整理的symfony-2.1 – 表单:避免将null设置为非提交的字段全部内容,希望文章能够帮你解决symfony-2.1 – 表单:避免将null设置为非提交的字段所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。