Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在sonata管理控制器中设置flash消息_Php_Symfony_Admin_Sonata Admin_Flash Message - Fatal编程技术网

Php 如何在sonata管理控制器中设置flash消息

Php 如何在sonata管理控制器中设置flash消息,php,symfony,admin,sonata-admin,flash-message,Php,Symfony,Admin,Sonata Admin,Flash Message,我正在寻找一种在sonata管理包的管理控制器中设置flash消息的方法,它们允许将CRUDController中的flash消息设置为 $this->get('session')->setFlash('sonata_flash_error', 'flash_batch_merge_error'); 但不是在管理控制器中 这是我的管理员 use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Datagrid\ListM

我正在寻找一种在sonata管理包的管理控制器中设置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 

}

}

感谢您的帮助

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


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

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


是的,您可以在管理类中设置flash消息。首先。例如,如果您想要一个success flash消息类型,请将其添加到
app/config/config.yml
文件中:

sonata_core:
    flashmessage:
        success:
            types:
                - { type: mytodo_success, domain: MyToDoBundle }
然后,您需要知道何时设置消息。例如,如果要在创建新实体后设置消息,可以覆盖admin类中的
postPersist
函数,并将消息添加到Symfony flash包中:

public function postPersist($object) {
    $this->getRequest()->getSession()->getFlashBag()->add("mytodo_success", "My To-Do custom success message");
}
这样,每当您在admin类中创建新实体时,就会显示消息

您还可以使用默认类型success:

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

因为它是一个管理类,我在会话服务上得到了闪络包:

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

干杯

你所说的“管理员控制器”是什么意思?嘿,我修改了我的问题,希望这能说明我想要的是什么,->添加(“成功”,对我来说是成功的,sonata中似乎支持“成功”,“警告”和“错误”类型。问题是,你最后收到两条消息,新添加的一条,默认情况下是一条。如何覆盖或删除默认值?回答不正确,不应被接受:如其他回答中所述,您可以在任何可以注入服务的类(包括Sonata admin类)中注入会话服务以使用flashbag。