2015-12-30 1 views
2

У меня есть MenuBundle, и я хочу показать свою пользовательскую ошибку в sonata admin.Как показать пользовательскую ошибку в sonata admin

Администратор: 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'); 
    } 

Validation работает нормально, но пользовательские ошибки не появляется.

validation in admin

+0

ошибка уже обнаружена, поэтому флажок установлен в красный цвет, если вы сосредоточитесь с помощью мыши в Включена ли метка, показывающая вашу ошибку? можете ли вы увидеть с профилировщиком какие-либо другие ошибки? –

+0

Да, пользовательская ошибка отображается при наведении курсора мыши, но я хочу установить ошибку вместо красной полосы. но нет никакой другой ошибки с профайлерами. – Noman

ответ

4

Решение # 1: с ErrorElement.

просто используйте error_bubbling => true на поле.

Примечание для решения №1: Не забудьте добавить ниже use услуги валидатора в админ.

использование Sonata \ AdminBundle \ Validator \ ErrorElement;

Решение # 2: С Sonata - FLASH MESSAGES

Я сделал это с помощью Sonata - FLASH MESSAGES

$formMapper->add('enabled', null, array(
       'error_bubbling' => true 
      )); 

MenuAdmin

/** 
    * {@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 }