2017-06-10 5 views
-1

Ich bin neu in Symfony und es bereitet mir große Schwierigkeiten, die Sitzungen festzulegen.symfony 3 Sitzungsvariable kann nicht gesetzt werden

Ich bin mir nicht sicher, was die Sitzungskonfiguration sein sollte, also versuche ich eine separate Klasse zu erstellen, die alle sitzungsbezogenen Funktionen behandelt.

Ich bin mir bewusst, dass das Objekt $ request enthält alle Sitzungsinformationen, aber den Zugriff auf es in einem Controller entgeht mir.

Auf der anderen Seite kann ich darauf zugreifen und es sogar auf Twig ändern, aber das ist nicht der richtige Weg, damit umzugehen, verstehe ich.

Wie es ist, wirft es ein Fehler

Aufruf einer Member-Funktion set() auf null

auf den

$ Session-> set (‚cart_ads ', 10);

Zeile in der Datei SessionManagerController.php. Es scheint also so zu sein, als würde die Variable $ session nicht auf null gesetzt.

Dies ist die Setup:

Auf app_dev.php, dh der Front-Controller.

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Debug\Debug; 
use Symfony\Component\HttpFoundation\Session\Session; 
use AppBundle\Controller\SessionManagerController; 


/** @var \Composer\Autoload\ClassLoader $loader */ 
$loader = require __DIR__.'/../app/autoload.php'; 
Debug::enable(); 

$kernel = new AppKernel('dev', true); 
//$kernel->loadClassCache(); 
$request = Request::createFromGlobals(); 
SessionManagerController::sessionAction($request);//error here*** 
$response = $kernel->handle($request); 
$response->send(); 
$kernel->terminate($request, $response); 

SessionManagerController.php

namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 

class SessionManagerController extends Controller 
{ 

    public function sessionAction(Request $request) 
    { 
     $session = $request->getSession(); 
     $session->set('cart_ads', 10); //error here*** 

    } 
} 
+3

Ihr Versuch, sessionAction aus app.php aufzurufen, ergibt keinen Sinn. Sie haben Zugriff auf die Sitzung innerhalb einer regulären Controller-Aktion. http://symfony.com/doc/current/controller.html#managing-the-session – Cerad

+0

was meinst du mit "Ich bin mir bewusst, dass das $ request-Objekt enthält alle Sitzungsinformationen, aber den Zugriff auf es in einem Controller entgeht mir . " ? – lordrhodos

+0

@Cerad, eigentlich arbeite ich mit Symfony 3.2.8, daher ist SessionInterface nicht verfügbar. Ich habe zwar versucht, Request $ Request zu injizieren, aber es gibt einen Fehler, der besagt, dass ich keine Instanz von $ request angegeben habe. Am Ende funktioniert es laut Rendy Eko Prastiyo Antwort, aber ich hätte gerne innerhalb des Controllers getan. – BernardA

Antwort

1

Die session Anzeige ist nicht verfügbar in $request weil Sie SessionManagerController::sessionAction($request); aufrufen, bevor Sie $kernel->handle($request) nennen. Symfony Anhang session in request nach dem Anruf $kernel->handle($request).

$kernel = new AppKernel('dev', true); 
$request = Request::createFromGlobals(); 
$response = $kernel->handle($request); 

// this method has to be called after you call $kernel->handle($request) 
// so you will have session object attached to $request 
SessionManagerController::sessionAction($request); 

$response->send(); 
$kernel->terminate($request, $response); 
+0

Das funktioniert, danke. Irgendwelche Ideen, warum es nicht innerhalb des Controllers funktionieren würde? – BernardA

+0

Weil Ihr 'Controller' aufgerufen wird, bevor der' Kernel' 'die Anwendung handhabt. Die 'Handle'-Methode ist das Herz von' Symfony'. Wenn Sie mehr über die Magie der 'Handle'-Methode erfahren möchten, können Sie sie [hier] lernen (https://knpuniversity.com/screencast/symfony-journey/httpkernel-handle).Wenn Sie Ihre Sitzung außerhalb des "Hauptcontrollers" ändern möchten, können Sie [Kernel Events] (https://symfony.com/doc/current/reference/events.html#kernel-events) verwenden. –

Verwandte Themen