11

我正在寻找一种在奏鸣曲管理包的管理控制器中设置闪存消息的方法,它们允许将 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 

}

}

感谢你的帮助

4

4 回答 4

18

是的,您可以在管理员课程中设置闪信。首先,您可以为 SonataCoreBundle 定义一个自定义的 flash 消息类型。例如,如果您想要一个成功的 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");
}
于 2014-03-06T20:30:13.417 回答
4

因为它是一个 Admin 类,所以我通过 Session 服务获得了 flashbag:

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

干杯

于 2016-10-11T09:16:10.750 回答
3

您说的是管理类,而不是控制器。

这在默认情况下是不可能的。最好的方法是编写一个自定义的 CRUDController(从默认的扩展)并在那里处理它。

于 2013-07-30T10:51:08.680 回答
3

您需要将会话服务注入您的管理类。

http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services

于 2013-07-30T12:18:29.327 回答