【发布时间】:2014-04-01 16:56:54
【问题描述】:
我做了我自己的 URLGenerator (Symfony\Component\Routing\Generator\UrlGenerator) 扩展了原来的 URLGenerator。我想从那里访问 Symfony2 会话,但我不能。
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;
}
}
我阅读了documentation,但我不知道如何访问。只能从控制器访问会话吗? 我搜索了here,但我想为会话调用一个 Symfony 对象。
\Resoruces\config\services.yml
parameters:
router.options.generator_base_class: Ex\Bundle\ExBundle\Routing\Generator\UrlGenerator
更新 1: 我补充说:
ex.service:
class: Ex\Bundle\ExBundle\Routing\Generator\UrlGenerator
arguments: [@session]
和:
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 )
【问题讨论】:
-
您可以扩展构造函数以接受 SessionInterface 对象并在那里注入
@session服务;你试过吗? -
您能否更新您的问题以包含您注册 url 生成器的部分?
-
你看到这个问题了吗? stackoverflow.com/questions/13901536/… 它告诉你如何在你的类中使用容器,你可以使用它来获取
session服务。