2013-07-30 12 views
5

im der Suche nach einem Weg setzen Flash-Mitteilung im Admin-Controller von sonata Admin-Bundle zu setzen, damit sie Flash-Mitteilungen in CRUDController alsWie Flash-Nachricht in sonata Admin Admin-Controller

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

aber nicht in der festlegen Admin-Controller,

das ist mein Admin 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 

} 

} 

schätzen Ihre Hilfe

+0

Was Sie tun bedeuten von "admin controller"? – rpg600

+0

hey, ich habe mein Problem geändert hoffe das macht Sinn Was ich will – Lasith

Antwort

2

Sie sprechen von einer Admin-Klasse, nicht von einem Controller.

Und das ist standardmäßig nicht möglich. Am besten schreiben Sie einen benutzerdefinierten CRUDController (erweitern Sie den Standard-CRUDController) und bearbeiten Sie ihn dort.

+2

falsche Antwort, die nicht akzeptiert werden sollte: wie in anderen Antworten beschrieben, können Sie den Sitzungsservice injizieren, um den Flashbag in jeder Klasse zu verwenden, wo Sie injizieren können Dienste, einschließlich Sonata-Admin-Klassen. –

11

Ja, können Sie eine Flash-Mitteilung in einer Admin-Klasse festgelegt. Erstens, you can define a custom flash message type for the SonataCoreBundle. Zum Beispiel, wenn Sie einen Erfolg Flash-Nachrichtentyp mögen, fügen Sie diese auf der app/config/config.yml Datei:

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

Dann müssen Sie wissen, wann die Nachricht einzustellen. Zum Beispiel, wenn Sie die Nachricht afer die Schaffung eine neue Einheit setzen mögen, kann yo tun so das Überschreiben die postPersist Funktion in Ihrer Admin-Klasse, und das Hinzufügen der Nachricht in der Flash-Tasche Symfony:

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

diese Weise der Die Nachricht wird angezeigt, wenn Sie eine neue Entität in der Admin-Klasse erstellen.

können Sie auch den Erfolg Standardtyp verwenden:

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

ja, -> hinzufügen ("Erfolg", ..) ist erfolgreich für mich mit Sonate –

+4

"Erfolg", "Warnung" und "Fehler" Typen scheint in Sonate unterstützt werden –

1

Weil es ein Admin-Klasse ist erhalte ich die flashbag über den Session-Service:

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

Prost