2013-07-30 26 views
5

im tìm kiếm một cách để thiết lập tin nhắn nhấp nháy trong bộ điều khiển quản trị của bó sonata admin, chúng cho phép để thiết lập các thông điệp flash trong CRUDController nhưLàm thế nào để thiết lập tin nhắn nhấp nháy trong sonata quản trị quản lý điều khiển

$this->get('session')->setFlash('sonata_flash_error', 'flash_batch_merge_error'); 

nhưng không phải trong quản trị Controller,

này là admin của tôi contrller

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Route\RouteCollection; 

class ConfigAdmin extends Admin 
{ 

protected function configureFormFields(FormMapper $formMapper) 
{ 

    $formMapper 
     ->with('System Settings') 
      ->add('Name','text', array('label' => "Configuration Name")) 
      ->add('Language', 'choice', array(
       'label' => 'System Language', 
       'choices' => array(0 => 'English', 1 => 'Swedish'), 
       'preferred_choices' => array(0), 
       )) 
      ->add('commonmail','text', array('label' => "Common e-Mail")) 
      ->add('dateformat','text', array('label' => "Date format")) 
      ->add('currencyformat','text', array('label' => "Currency format")) 
     ->end() 
} 

public function postUpdate($object) { 

     // here i need to perform some validations and set flash message if there is an errror 

} 

} 

đánh giá cao sự giúp đỡ của bạn

+0

gì làm bạn có ý nghĩa bởi "admin controller"? – rpg600

+0

hey, tôi đã sửa đổi vấn đề của mình, điều này sẽ có nghĩa là tôi muốn – Lasith

Trả lời

2

Bạn đang nói về một lớp quản trị, không phải là một bộ điều khiển.

Và điều này là không thể theo mặc định. Cách tốt nhất để làm điều này là viết một CRUDController tùy chỉnh (mở rộng từ một mặc định) và xử lý nó ở đó.

+2

câu trả lời không chính xác, không được chấp nhận: như được mô tả trong các câu trả lời khác, bạn có thể tiêm dịch vụ phiên để sử dụng túi đèn flash trong bất kỳ lớp nào các dịch vụ, bao gồm các lớp quản trị Sonata. –

11

Có, bạn có thể đặt thông báo flash trong lớp quản trị viên. Đầu tiên, you can define a custom flash message type for the SonataCoreBundle. Ví dụ, nếu bạn muốn có một kiểu thông báo thành công flash, thêm này vào file app/config/config.yml:

sonata_core: 
    flashmessage: 
     success: 
      types: 
       - { type: mytodo_success, domain: MyToDoBundle } 

Sau đó, bạn cần phải biết khi nào để thiết lập các thông điệp. Ví dụ, nếu bạn muốn thiết lập các thông điệp afer tạo ra một thực thể mới, yo có thể làm như vậy trọng các postPersist hàm trong lớp quản trị của bạn, và thêm vào mẩu tin trong túi đèn flash Symfony:

public function postPersist($object) { 
    $this->getRequest()->getSession()->getFlashBag()->add("mytodo_success", "My To-Do custom success message"); 
} 

Bằng cách này, tin nhắn sẽ được hiển thị bất cứ khi nào bạn tạo một thực thể mới tại lớp quản trị.

Bạn cũng có thể sử dụng thành công loại mặc định:

public function postPersist($object) { 
    $this->getRequest()->getSession()->getFlashBag()->add("success", "My To-Do custom success message"); 
} 
+0

có, -> thêm ("thành công", ..) là thành công cho tôi với sonata –

+4

"thành công", "cảnh báo" và "lỗi" các loại dường như được hỗ trợ trong sonata –

1

Bởi vì nó là một lớp quản lý tôi nhận được flashbag so với dịch vụ phiên:

protected function whereever() 
{ 
    $this->getFlashBag()->add(
     'info', 
     'Your message' 
    ); 
} 
... 
protected function getFlashBag() 
{ 
    return $this->getConfigurationPool()->getContainer()->get('session')->getFlashBag(); 
} 

Cheers

Các vấn đề liên quan