[英]How do I store session and access it anywhere in my application in symfony2?
[英]How to access to the Symfony2 session from anywhere?
我做了自己的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;
}
}
我閱讀了文檔,但不知道如何使用。 只能從控制器訪問會話嗎? 我在這里搜索,但是我想在會話中調用一個Symfony對象。
\\ Resoruces \\設置\\ 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;
}
**此處錯誤-> set(:在中的非對象上調用成員函數set()
正如Maerlyn所說,也許您應該使用一種結構來實現這一點。 看看如何在服務中使用參數: http : //symfony.com/doc/current/book/service_container.html
更新1:檢查第二個答案。 可能會有幫助。 如何從Symfony2中的服務訪問用戶會話?
更新2:
對我來說,這段代碼有效,但是我不知道我對Symfony \\ Component \\ Routing \\ Generator \\ UrlGenerator的重寫是否是一個好習慣。
應用程序/配置/ config.yml
ex.service:
class: Test\YourBundle\Service\UrlGenerator
arguments: [@router]
calls:
- [setSession, ["@session"]]
SRC /測試/ YourBundle /服務/ 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 /測試/ YourBundle /控制器/ DefaultController.php
class DefaultController {
// ...
public function indexAction()
{
// Retrieve my service
$service = $this->get('ex.service');
echo $service->generate('_demo');
}
// ...
}
試試這個解決方案
use Symfony\Component\HttpFoundation\Session\Session;`
$session = new Session();
$session->get('variable');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.