0

symfony2の達人の誰かが、symfony2サービスからフラッシュメッセージを書く方法について教えてくれますか?

以下のように容器を注入したときに必要なものがあると思いましたが、どうやらそうではなく、エラーが発生します

Fatal error: Call to undefined method appDevDebugProjectContainer::getRequest() in /var/www/cloudsign_beta/src/BizTV/CommonBundle/Helper/globalHelper.php on line 135

どうやら私はリクエストにアクセスできません...コントローラーからもそれを渡さなければならない場合、私はすぐにサービスのポイントを失い、それ自体では何もできなくなります=)

<?php
namespace BizTV\CommonBundle\Helper;

use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Doctrine\ORM\EntityManager as EntityManager;

use BizTV\CommonBundle\Entity\Log;

class globalHelper {    

    private $container;
    private $em;

    public function __construct(Container $container, EntityManager $em) {
        $this->container = $container;
        $this->em = $em;
    }

    public function log($type,$message) {

        // currently $type can be 'success', 'fail' or 'error'.

        $currentUser = $this->container->get('security.context')->getToken()->getUser();
        $currentCompany = $this->container->get('security.context')->getToken()->getUser()->getCompany();

        //if the $type is one that we want to write to the log then create log entity (we don't log failed attempts at operations, but we do log errors.
        if ($type == 'success') {
            $em = $this->em;
            $now = new \DateTime("now");

            $entity  = new Log();
            $entity->setCompany($currentCompany);
            $entity->setExecutor($currentUser);
            $entity->setTime($now);
            $entity->setEventType($type);
            $entity->setEventMessage($message);

            $em->persist($entity);
            $em->flush();
        }

        //flash out the $message message text
        $container = $this->container;
        $session = $container->getRequest()->getSession()->setFlash($type, $message);

    }

}   
4

1 に答える 1

1
$session = $container->get('request')->getSession()->setFlash($type, $message);

ただし、存在するかどうかわからない場合がありますのでご注意くださいrequest。これを管理する適切な方法は、サービスをスコープに制限するrequestことです。

于 2013-01-04T14:58:34.410 に答える