我有MenuBundle
,我想在奏鸣曲管理员中显示我的自定义错误。
管理员: MenuAdmin.php
/** * {@inheritdoc} */ public function validate( ErrorElement $errorElement, $object ) { // if ( $object->getEnabled() == false && $object->getMenuType() == 'header' ) { $custom_error = 'Header menu cannot be disabled, please mark enabled to checked.'; $errorElement->with( 'enabled' )->addViolation( $custom_error )->end(); } }
FormMapper in admin
:
protected function configureFormFields( FormMapper $formMapper ) { $formMapper ->add( 'title' ) ->add( 'menuType', 'choice', array( 'choices' => array( 'header' => 'Header', 'footer_left' => 'Footer Left', 'footer_right' => 'Footer Right', 'footer_bottom' => 'Footer Bottom' ), 'expanded' => true, 'multiple' => false ) ) ->add( 'enabled' ); }
验证工作正常,但未出现自定义错误。
解决方案1:具有ErrorElement。
只需error_bubbling => true
在现场使用。
解决方案#1的注意事项:不要忘记
use
在admin中添加以下验证程序服务。使用Sonata \ AdminBundle \ Validator \ ErrorElement;
解决方案2:使用Sonata-闪烁消息
我已经通过使用奏鸣曲做到了-FLASH MESSAGES
$formMapper->add( 'enabled', null, array( 'error_bubbling' => true ) );
菜单管理
/** * {@inheritdoc} */ public function validate( ErrorElement $errorElement, $object ) { // if ( $object->getEnabled() == false && $object->getMenuType() == 'header' ) { $error = 'Header menu cannot be disabled, please mark enabled to checked.'; $errorElement->with( 'enabled' )->addViolation($error)->end(); $this->getRequest()->getSession()->getFlashBag()->add( "menu_type_check", $error ); } }
YML
路径:YourBundle \ Resources \ config \ admin.yml
sonata_core: flashmessage: error: #css_class: error_msg # optionally, a CSS class can be defined types: - { type: menu_type_check, domain: YourBundle }