How to use session in Symfony

前端 未结 2 1315
再見小時候
再見小時候 2021-01-23 09:11

I\'m getting a hard time trying to understand how symfony session works.
And couldn\'t find the answer I\'m looking for here on S.O. or other external sources.

[SETT

2条回答
  •  温柔的废话
    2021-01-23 09:49

    One way of getting Sessions from controller is:

    $session = $this->get("session");

    Setter: $session->set('id','');

    Getter: $session->get('id');

    Full Code

    public function sessionAction(Request $request) {
        $em = $this->getDoctrine()->getManager();
        $site = $em->getRepository('SiteBundle:Site')->findOneBy(array('url'=>$request->getSchemeAndHttpHost()));
        if($site) {
            $session = $this->get("session");
            $session->set('id',$site->getId());
            $session->set('url',$site->getUrl());
            $session->set('name',$site->getName());
        } else {
            [...]
        }
    }
    

    Update-1:

    Create service to set session variables

    AppBundle\EventListener\SessionHandler.php

    doctrine  = $doctrine;
            $this->router    = $router;
            $this->container = $container;
        }
    
        public function setSession() {
            $route = $this->container->get('request')->get('_route');
            $site = $this->doctrine->getRepository('SiteBundle:Site')->findOneBy(array('url' => $route->getUri()));
            if($site) {
                $session = $this->container->get("session");
                $session->set('id',$site->getId());
                $session->set('url',$site->getUrl());
                $session->set('name',$site->getName());
            } else {
                [...]
            }
        }
    }
    

    AppBundle\Resources\config\services.yml

    Option-1

    Call setSession() function on each page load event.

    session_handler:
            class: AppBundle\EventListener\SessionHandler
            arguments: [@doctrine, @router, @service_container]
            tags:
                - {name: kernel.event_listener, event: kernel.request, method: setSession} 
    

    Option-2

    Call setSession() function manually where you need to set session.

    session_handler:
            class: AppBundle\EventListener\SessionHandler
            arguments: [@doctrine, @router, @service_container]
            tags:
                - {name: kernel.event_listener }
    

    Call setSession() function from controller

    $sessionService = $this->get('session_handler');
    $sessionService->setSession();
    

提交回复
热议问题