簡體   English   中英

如何從任何地方訪問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM