LogicException:控制器必须返回响应(给定null)。您是否忘记在控制器中的某处添加return语句?

时间:2012-09-25 04:53:54

标签: php symfony fosuserbundle

注销后我想重定向到索引页面,但我在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();
       }
 }

在logoutAction会话之后我想重定向到索引页面
如何重定向到它。

有人可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您需要在logoutAction() ...

中调用重定向
return $this->redirect($this->generateUrl('name_of_route'));

答案 1 :(得分:3)

Jaitsu是对的,只是你的Controller扩展了ContainerAware而不是Controller类,它提供了基本控制器动作的快捷方式......

return new Symfony\Component\HttpFoundation\RedirectResponse($this->generateUrl('name_of_route'));