1

如果你想从控制器访问会话,你可以使用this->get('session');.

但是它是如何在扩展中工作的呢?

我尝试在 services.xml 中配置它并调整 __construct($session) 方法:

<service id="myService" class="%myServie.class%">
    <argument type="service" id="session"/>
</service>

没用。(空对象)

我尝试从请求中达到它:

$request = Request::createFromGlobals();
$session = $request->getSession();

没用。(空对象)

目前我正在为我的方法提供我在控制器中检索的会话,但我对这个解决方案不满意(我认为这是一个肮脏的解决方案)。

你如何以正确的方式做到这一点?

问候, Senad

4

1 回答 1

4

您可以通过多种方式解决此问题。一种方法是使用在整个框架中使用的依赖注入。

如果您将会话传递给您的扩展构造函数,那么您就是将会话“注入”到类中。

示例代码

class MyService
{
    public function __construct($session)
    {
        // ...
    }
}


class MyController extends Controller
{
    public function exampleAction()
    {
        $myService = new MyService($this->get('session'));
    }
}

Symfony 2 提供了一种自动注入此会话的方法。为此,您需要创建一个服务:

services.yml 示例代码

services:
    myService:
        class: %myService.class%
        arguments: ["@session"]

然后在您的控制器中,您可以获得服务:

$myService = $this->get('myService');
于 2012-05-21T16:00:39.957 回答