duanjia6959 2014-02-28 15:37
浏览 66

如何从任何地方访问Symfony2会话?

I did my own URLGenerator (Symfony\Component\Routing\Generator\UrlGenerator) extending the original URLGenerator. I want to access the Symfony2 session from there, but I can't.

use Symfony\Component\Routing\Generator\UrlGenerator as BaseUrlGenerator;

class UrlGenerator extends BaseUrlGenerator
{
protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens)
{
    $url=parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens);

   **//Here I want to access to session** 

    return $url;
}

}

I read the documentation but I dont know how to acess. Only can access to session from a controller? I searched here, but I want to invoke a Symfony Object to the session.

\Resoruces\config\services.yml

 parameters:
    router.options.generator_base_class: Ex\Bundle\ExBundle\Routing\Generator\UrlGenerator

UPDATE 1: I added:

ex.service:
    class: Ex\Bundle\ExBundle\Routing\Generator\UrlGenerator
    arguments: [@session]

and:

private $session;

public function __construct($session, RouteCollection $routes, RequestContext $context, LoggerInterface $logger = null)
{
    $this->routes = $routes;
    $this->context = $context;
    $this->logger = $logger;
    $this->session = $session;
}

protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens)
{

 $url=parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters,   $name, $referenceType, $hostTokens);

 $this->session->set($url,$url);

 return $url;
}

** ERROR here on ->set (: Call to a member function set() on a non-object in )

  • 写回答

2条回答 默认 最新

  • dongxu7121 2014-02-28 16:03
    关注

    As Maerlyn said maybe you should use a construct to implement this. Have a look on how to use arguments in service: http://symfony.com/doc/current/book/service_container.html

    Update 1 : Check the second answer. It could be helpful How do you access a users session from a service in Symfony2?

    Update 2 :

    For me this code works but Idon't know if my override of Symfony\Component\Routing\Generator\UrlGenerator is a good practice.

    app/config/config.yml

    ex.service:
      class: Test\YourBundle\Service\UrlGenerator
      arguments: [@router]
      calls:
           - [setSession, ["@session"]]
    

    src/Test/YourBundle/Service/UrlGenerator.php

    namespace Test\YourBundle\Service;
    use \Symfony\Component\Routing\Generator\UrlGenerator as BaseUrlGenerator;
    use \Symfony\Component\Routing\RequestContext as RequestContext;
    class UrlGenerator extends BaseUrlGenerator {
    
        private $session;
    
        public function __construct(\Symfony\Component\Routing\Router $routes,  \Psr\Log\LoggerInterface $logger = null) {
            parent::__construct($routes->getRouteCollection(), new RequestContext(), $logger);
        }
    
        public function setSession($session) {
            $this->session = $session;
        }
    
        public function getSession() {
            return $this->session;
        }
    
    
        protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens)
        {
         $url=parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters,   $name, $referenceType, $hostTokens);
    
         $this->session->set($url,$url);
    
         return $url;
        }
    }
    

    src/Test/YourBundle/Controller/DefaultController.php

    class DefaultController {
        // ...
        public function indexAction()
        {
                // Retrieve my service
                $service = $this->get('ex.service');
                echo $service->generate('_demo');
        }
        // ...
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line