Fehler beim starten der session: bereits von PHP ($_SESSION eingestellt ist). 500 Internal Server Error - RuntimeException
Ich versuche zu implementieren Sie eine einfache login-Seite für meine usermanagementbundle und ich bin neu in der Erstellung einer form thru formbuilder. Es gibt nur 3 Funktion in meinem bundle, wo es eine neue Sitzung und heisst es in unterschiedlichen Routen, auch wenn ich entfernen, die anderen 2 hab ich noch die gleiche Fehlermeldung erhalten. Hier ist mein code:
<?php
namespace Acme\UserManagementBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Acme\UserManagementBundle\Entity\Users;
use Acme\UserManagementBundle\Form\SigninType;
class DefaultController extends Controller
{
public function indexAction()
{
$session = new Session();
$users = new Users();
$form = $this->createForm(new SigninType(), $users);
if ($session->has('token'))
{
return $this->render('AcmeUserManagementBundle:Default:home.html.twig', array('token' => $session->get('token')));
}
if (!($session->has('alert')))
{
$session->set('alert', 'Welcome');
return $this->render('AcmeUserManagementBundle:Default:index.html.twig', array('form' => $form->createView(), 'alert' => 'Welcome!'));
}
else
{
$alert = $session->get('alert');
$session->clear();
return $this->render('AcmeUserManagementBundle:Default:index.html.twig', array('form' => $form->createView() ,'alert' => $alert));
}
}
public function logoutAction()
{
$session = new Session();
$session->invalidate();
return $this->render('AcmeUserManagementBundle:Default:index.html.twig');
}
public function signupAction()
{
return $this->render('AcmeUserManagementBundle:Default:signup.html.twig');
}
public function LoginAction(Request $request)
{
$session = new Session();
if ($request->getmethod()=='POST' || $session->get('token') != ""){
$user = $request->get('user');
$password = $request->get('password');
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository('AcmeUserManagementBundle:Users');
$username = $repository->findOneBy(array('username'=>$user,'password'=>$password));
if (!$session->get('token') && $username)
{
$token = $this->get('token_generator')->getToken();
$session->set('token', $token, 'user', $username);
} else {
$session->set('alert', 'Invalid Username and/or Password!');
return $this->redirect($this->generateUrl('homepage'));
}
return $this->redirect($this->generateUrl('homepage'));
} else {
return $this->redirect($this->generateUrl('homepage'));
}
}
}
Wenn ich versuchte, Sie zu implementieren formbuilderinterface innerhalb meiner Funktion habe ich plötzlich festgestellt das einer gegen die normale Schaffung von aus-thru html, die habe ich bekommen überhaupt keine Probleme. Gibt es da ein problem mit meinem code? da habe ich versucht, dieses login-code thru HTML und konvertieren Sie es in formbuilderinterface Komponente von Symfony.
InformationsquelleAutor der Frage Cedric | 2014-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Symfony2, standardmäßig, startet die Sitzungen automatisch für Sie.
Gibt es keine Notwendigkeit
$session = new Session();
Versuchen, diese,
Ref: http://symfony.com/doc/current/book/controller.html#managing-the-session
InformationsquelleAutor der Antwort Krish R
Du machst es falsch !
Ich habe verschwenden einige Zeit mit der Suche nach einer Lösung für dieses problem, und am Ende tut die gleiche Sache ( mit Request $request ) in der functionAction() senden Sie eine session-variable zu einer Vorlage.
Aber all das ist falsch. ZWEIG ist in der Lage, Zugriff auf alle session-Variablen direkt, die Sie nicht brauchen, um eine variable in dem ZWEIG render().
Antwort auf die ursprüngliche problem, Sie sollten behalten Sie die Standard-Verhalten der indexAction() ohne parameter, und entfernen Sie die " array('token' => $session->get('token')) " von Ihrem TWIG Rendern aufrufen.
Das einzige, was zu wissen ist, dass Sie rufen Sie die session-variable "token" direkt in Ihre Vorlage mit : {{ app.Sitzung.get('token') }}
Und lassen Sie die Magie ! Einfach ist das !
InformationsquelleAutor der Antwort tenac