如何在奏鸣曲 admin Admin Controller 中设置 Flash 消息
Posted
技术标签:
【中文标题】如何在奏鸣曲 admin Admin Controller 中设置 Flash 消息【英文标题】:How to set flash message in sonata admin Admin Controller 【发布时间】:2013-07-30 05:04:53 【问题描述】:我正在寻找一种在奏鸣曲管理包的管理控制器中设置闪存消息的方法,它们允许将 CRUDController 中的闪存消息设置为
$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
感谢您的帮助
【问题讨论】:
“管理员控制器”是什么意思? 嘿,我修改了我的问题希望这对我想要的有意义 【参考方案1】:您说的是管理类,而不是控制器。
默认情况下这是不可能的。最好的方法是编写一个自定义的 CRUDController(从默认的扩展)并在那里处理它。
【讨论】:
不应该被接受的错误答案:如其他答案中所述,您可以注入会话服务以在任何可以注入服务的类中使用 flashbag,包括 Sonata 管理类。 【参考方案2】:您需要将 session 服务注入到您的管理类中。
http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services
【讨论】:
【参考方案3】:是的,您可以在管理员类中设置闪信。首先,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");
这样,每当您在管理类中创建新实体时,都会显示该消息。
也可以使用默认类型success:
public function postPersist($object)
$this->getRequest()->getSession()->getFlashBag()->add("success", "My To-Do custom success message");
【讨论】:
是的,->add("success",..) 对我来说奏鸣曲是成功的 奏鸣曲似乎支持“成功”、“警告”和“错误”类型 问题是您最后收到两条消息,一条是新添加的,一条是默认消息。如何覆盖或删除默认值?【参考方案4】:因为它是一个 Admin 类,所以我通过 Session 服务获得了 flashbag:
protected function whereever()
$this->getFlashBag()->add(
'info',
'Your message'
);
...
protected function getFlashBag()
return $this->getConfigurationPool()->getContainer()->get('session')->getFlashBag();
干杯
【讨论】:
以上是关于如何在奏鸣曲 admin Admin Controller 中设置 Flash 消息的主要内容,如果未能解决你的问题,请参考以下文章