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:

symfony api

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

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -