2013-07-30 22 views
5

im szuka sposobu, aby ustawić wiadomość bezpośrednią kontroler admin sonata administratora wiązki, pozwalają ustawić wiadomości flash w CRUDController jakJak ustawić wiadomość błysku w sonata Admin Admin Controller

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

ale nie w Administrator Controller

to moja administracja 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 

} 

} 

wdzięczni za pomoc

+0

Co masz na myśli według "administratora administratora"? – rpg600

+0

Hej, zmodyfikowałem moje wydanie, mam nadzieję, że to będzie miało sens, jeśli chcę, aby – Lasith

Odpowiedz

2

Mówisz o klasie administracyjnej, a nie kontrolerze.

A to nie jest możliwe domyślnie. Najlepszym sposobem jest napisanie niestandardowego kontrolera CRUD (rozszerzenie z domyślnego) i obsłużenie go w tym miejscu.

+2

nieprawidłową odpowiedź, która nie powinna być zaakceptowana: jak opisano w innych odpowiedziach, można wstrzyknąć usługę sesji, aby użyć Flashbag w dowolnej klasie, w której można wstrzyknąć usługi, w tym klasy administracyjne Sonata. –

11

Tak, można ustawić wiadomość błysku w klasie administratora. Najpierw you can define a custom flash message type for the SonataCoreBundle. Na przykład, jeśli chcesz typ wiadomości sukces flash dodać ten plik app/config/config.yml:

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

Następnie trzeba wiedzieć, kiedy należy ustawić wiadomość. Na przykład, jeśli chcesz ustawić wiadomość afer tworząc nowy podmiot, może yo zrobić przesłanianie funkcji w swojej klasie administratora postPersist i dodanie wiadomości w Symfony worka zapłonu:

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

ten sposób, wiadomość zostanie wyświetlona po utworzeniu nowego obiektu na poziomie administratora.

Można również użyć sukces domyślny typ:

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

yes, -> add ("success", ..) jest dla mnie sukcesem z sonatą –

+4

"Typy sukcesu", "warning" i "error" wydają się być obsługiwane w sonacie –

1

Ponieważ jest to klasa Admin uzyskać flashbag nad usługą sesji:

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

Cheers