0

次のようにセッションを開始(またはアクセス)しようとしています:

    $session = new Session();
    echo $session->getId();

セッションが自動的に開始されるため、ドキュメントによると、これだけで十分です (http://symfony.com/doc/master/components/http_foundation/sessions.html):

While it is recommended to explicitly start a session, a sessions will actually start 
on demand, that is, if any session request is made to read/write session data.

それにもかかわらず、エラーが発生します

Failed to start the session because headers have already been sent.

サービスを呼び出す元のコントローラーは次のとおりです。

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpFoundation\Response;

        $auth = $this->get('authentication');
        $user_id = $auth->getUserId();

そして getUserId 関数:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;

public function getUserId() {
    $session = new Session();
    echo $session->getId();

そして、getUserId を次のように変更すると:

public function getUserId() {
    $session = $this->getRequest()->getSession();
    echo $session->getId();

エラーが発生します:

Call to a member function get() on a non-object
4

1 に答える 1

2

スタンドアロン コンポーネント「HTTP Foundation」のドキュメントを見ています。これは、フルスタック フレームワーク symfony2 を使用する場合に適用されるものについて非常に注意する必要があることを意味します。

Symfony2 はすでにリクエスト/レスポンスとセッションを処理しているため、Session オブジェクトを作成する必要はありません。セッションの使用方法については、通常のドキュメントである Chapter Controllerを参照してください。

コントローラーでセッションにアクセスするために必要なのは、

$session = $this->getRequest()->getSession();

サービス内のセッションにアクセスする場合は、service.yml の依存関係としてサービスの「Request」を渡し、それよりもセッションにアクセスする必要があります。

$session = $request->getSession();

慣れていない場合は、サービス コンテナーの章にいくつかの説明があります。

于 2012-10-22T03:44:50.780 に答える