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();

うまくいきませんでした。(ヌルオブジェクト)

現在、コントローラーで取得したセッションをメソッドに提供していますが、このソリューションには満足していません (汚いソリューションだと思います)。

これをどのように正しい方法で行いますか?

よろしく、セナド

4

1 に答える 1

4

この問題はさまざまな方法で解決できます。1 つの方法は、フレームワーク全体で使用される Dependency Injection を使用することです。

セッションを拡張コンストラクターに渡す場合は、セッションをクラスに「注入」しています。

サンプルコード

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 に答える