我正在寻找一种在sonata admin bundle的admin控制器中设置flash消息的方法,它们允许在CRUDController中设置flash消息
$this->get('session')->setFlash('sonata_flash_error', 'flash_batch_merge_error');
但不在管理控制器中,
这是我的管理员控制器
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
}
}
感谢您的帮助
答案 0 :(得分:14)
是的,您可以在管理类中设置Flash消息。首先,you can define a custom flash message type for the SonataCoreBundle。例如,如果您想要成功的Flash消息类型,请在app/config/config.yml
文件中添加:
sonata_core:
flashmessage:
success:
types:
- { type: mytodo_success, domain: MyToDoBundle }
然后,您需要知道何时设置消息。例如,如果要在创建新实体后设置消息,可以覆盖管理类中的postPersist
函数,并在Symfony闪存包中添加消息:
public function postPersist($object) {
$this->getRequest()->getSession()->getFlashBag()->add("mytodo_success", "My To-Do custom success message");
}
这样,只要您在管理类中创建新实体,就会显示该消息。
您还可以使用默认类型成功:
public function postPersist($object) {
$this->getRequest()->getSession()->getFlashBag()->add("success", "My To-Do custom success message");
}
答案 1 :(得分:3)
您需要将会话服务注入您的管理类。
http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services
答案 2 :(得分:2)
您正在谈论的是管理类,而不是控制器。
默认情况下这是不可能的。最好的方法是编写一个自定义的CRUDController(从默认值扩展)并在那里处理它。
答案 3 :(得分:2)
因为它是Admin类,所以我通过Session服务获得了flashbag:
protected function whereever()
{
$this->getFlashBag()->add(
'info',
'Your message'
);
}
...
protected function getFlashBag()
{
return $this->getConfigurationPool()->getContainer()->get('session')->getFlashBag();
}
干杯