Исключение LogicException: Контроллер должен вернуть ответ (задано значение null). Вы забыли добавить оператор возврата где-нибудь в своем контроллере?


После выхода из системы я хочу перенаправить на страницу индекса, но я получаю ошибку в FOSUserBundle

В SecurityController.php

 <?php
      namespace ispg\Bundle\ChatBundle\Controller;
      namespace FOS\UserBundle\Controller;

      use Symfony\Bundle\FrameworkBundle\Controller\Controller;
      use Symfony\Component\DependencyInjection\ContainerAware;
      use Symfony\Component\Security\Core\SecurityContext;
      use Symfony\Component\Security\Core\Exception\AuthenticationException;

 class SecurityController extends ContainerAware
 {
     public function loginAction()
     {        
          $request = $this->container->get('request');
          /* @var $request \Symfony\Component\HttpFoundation\Request */
          $session = $request->getSession();
          /* @var $session \Symfony\Component\HttpFoundation\Session */
          $network = $request->get("network");

          // get the error if any (works with forward and redirect -- see below)
          if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
             $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
          } elseif (null !== $session && $session->has(SecurityContext::AUTHENTICATION_ERROR)) {
             $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
             $session->remove(SecurityContext::AUTHENTICATION_ERROR);
          } else {
             $error = '';
          }

          if ($error) {
              // TODO: this is a potential security risk (see http://trac.symfony-project.org/ticket/9523)
              $error = $error->getMessage();
          }

          // last username entered by the user
          $lastUsername = (null === $session) ? '' : $session->get(SecurityContext::LAST_USERNAME);

          //create the select tag for network selection
          require 'mnoNetworks.php';
          $selectHtml = "<select id=\"networks\">
                         <option value=\"\"> -- Select -- </option>";

          foreach($networks as $network){
             $selectHtml .= "<option value=\"".$network."\">".$network."</option>";
          }
          $selectHtml .="</select>";

          return $this->container->get('templating')->renderResponse('FOSUserBundle:Security:login.html.'.$this->container->getParameter('fos_user.template.engine'), array(
               'last_username' => $lastUsername,
               'error'         => $error,
               'network'        => $network,
               'networkSelector' => $selectHtml
           ));
      }

      public function checkAction()
      {
           throw new \RuntimeException('You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.');
      }

      public function logoutAction()
      {
           $bundle2 = new \ispg\Bundle\ChatBundle\Controller\DefaultController();
           $bundle2->setContainer($this->container);
           $returned_data = $bundle2->san();
       }
 }

После сеанса выхода из системы я хочу перенаправить на страницу индекса
как перенаправить на него.

Может ли кто-нибудь решить эту проблему?

Author: ASR, 2012-09-25

2 answers

Джайцу прав, просто ваш контроллер расширяет контейнерное программное обеспечение, но не класс контроллера, который предоставляет ярлыки для основных действий контроллера...

return new Symfony\Component\HttpFoundation\RedirectResponse($this->generateUrl('name_of_route'));
 3
Author: AlterPHP, 2012-09-25 09:27:29

Вам нужно вызвать перенаправление внутри вашего logoutAction()...

return $this->redirect($this->generateUrl('name_of_route'));
 3
Author: JamesHalsall, 2012-09-25 07:42:15