如何在奏鸣曲 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 消息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用奏鸣曲管理员创建自定义列表

Symfony - Sonata-Admin 菜单组翻译

Sonata Admin:获取所有页面的下拉列表

自定义奏鸣曲左侧边栏

Sonata Admin 嵌套表单

symfony2 多对多奏鸣曲 admin model_list