symfony - how to get the session variable in the view in symfony2 -
thanks valuable suggestions
i have created login system want store id's of users in session variables
this controller login system
use symfony\component\httpfoundation\session\session; class successcontroller extends controller { public function successaction(request $request) { --some code form-- $repository = $em->getrepository('repairstorebundle:users'); $query = $repository->auth($name,$password); $error="sorry invalid username or password"; if($query== false) { return $this->render('repairloginbundle:login:login.html.php', array( 'form' => $form->createview(),'error'=>$error,)); } else { $role=$query[0]['role']; $id=$query[0]['id']; if($role == 1) { $session = new session(); $session->start(); $session->set('id',$id); $result=$repository->display(); return $this->render('repairloginbundle:login:success.html.php',array('result'=>$result,)); } else { $session = new session(); $session->start(); $session->set('id',$id); $res= $repository->edit($id); return $this->render('repairloginbundle:login:user.html.php',array('res'=>$res)); } } } }
when admin logins role=1 render success.html.php
in view how can session variable have set in controller. have used $session->get('id'); giving me server error please this
upfront authentication should better done security component in symfony2. read more in the book - security. should take @ fosuserbundle
accessing session php template in symfony2:
echo $app->getsession()->get('whatever');
session handling
there article in official documentation: components/httpfoundation - session data management
the api documentation session component can found here: http://api.symfony.com/master/symfony/component/httpfoundation/session/session.html
in symfony2 standard-edition can session within controller with:
$session = $this->getrequest()->getsession();
as have request argument in successaction access session with:
$session = $request->getsession();
set value ( $value needs serializable ):
$session->set('key',$value);
get value with:
$session->get('key');
saving (and closing) session can done with:
$session->save();
you should loook @ sessionbag class. create sessionbag , register session. see:
in registered sessionbag - implements attributebaginterface - can , set key/value's desired.
tip: if want current user , have container aware controller ( container injected )
you can use:
$user = $this->container->get('security.context')->gettoken()->getuser();
if extending symfony's controller class in standard-edition - shorter way is:
$user = $this->get('security.context')->gettoken()->getuser();
or shorter (symfony > 2.1.x):
$user = $this->getuser();
alternative ( if controller not container aware ):
define controller service , inject @security.context:
yaml:
# src/vendor/yourbundle/resources/config/services.yml services: my.controller.service: class: vendor\yourbundle\controller\successcontroller arguments: ["@security.context"]
vendor\yourbundle\controller\successcontroller:
protected $securitycontext; public function __construct(securitycontextinterface $securitycontext) { $this->securitycontext = $securitycontext; }
then in action:
$user = $this->securitycontext->gettoken()->getuser();
note:: have use service in routing aswell if choose controller-as-service variant. example routing.yml :
[...] route_name: pattern: /success defaults: { _controller: my.controller.service:successaction } [...] [...]
note... can inject session "@session"
# src/vendor/yourbundle/resources/config/services.yml [...] arguments: ["@security.context","@session"]
note injecting whole container resource-heavy. advanced developers inject needed services one-by-one , not whole container.
tip: controller classes written capital first letter - example: *s*uccesscontroller
general tip: have unnecessary dublicate code in example:
// 'if' , 'else' execute same stuff here // result: dublicate code = more code = harder read if($role == 1) { $session = new session(); $session->start(); [...] } else { $session = new session(); $session->start(); [...] }
should better ...
// better: put stuff before if/else statement $session = new session(); $session->start(); if($role == 1) { [...] } else { [...] }
Comments
Post a Comment