私は私のusermanagementbundleの単純なログインページを実装しようとしています。formbuilderを介してフォームを作成するのは初めてです。バンドル内には3つの関数しかありません。新しいセッションがあり、別のルートで呼び出されます。他の2つを削除しても、同じエラーが発生します。これが私のコードです:
<?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'));
}
}
}
私の関数内にformbuilderinterfaceを実装しようとしたとき、私は突然これに遭遇しましたが、通常のHTMLからの作成に対して、まったく問題はありませんでした。コードに問題はありますか?このログインコードをHTMLで試し、Symfonyのformbuilderinterfaceコンポーネントに変換したためです。
デフォルトでは、symfony2は自動的にセッションを開始します。
$session = new Session();
の必要はありません
これを試して、
public function indexAction(Request $request)
{
$session = $request->getSession();
参照: http://symfony.com/doc/current/book/controller.html#managing-the-session
あなたはそれを間違っています!
私はその問題の解決策を探すのに少し時間を費やしてきましたが、最終的にはfunctionAction()で同じことを行い(Request $ requestを使用)、セッション変数をテンプレートに送信します。
しかし、これはすべて間違っています。 TWIGはすべてのセッション変数に直接アクセスできます。TWIG render()で変数を渡す必要はありません。
元の問題に答えるには、パラメーターなしでindexAction()のデフォルトの動作を維持し、「=(= token '=> $ session-> get(' token '))」をTWIGレンダーコール。
知っておくべきことは、次のコマンドを使用して、テンプレートでセッション変数「トークン」を直接呼び出すことができるということです:{{app.session.get( 'token')}}
そして魔法をしましょう!簡単です!