L4控制器中的__construct()无效

时间:2013-10-14 04:42:14

标签: php laravel-4

我知道如何在l4中使用filter但是我只是想知道为什么这段代码不起作用。

class CustomController extends BaseController
{
     public function __construct()
     {
          if(!Session::has('certain_id'))
             return 'You are not allowed here';
     }

     public function getAdd()
     {
          return 'You can add here and im sure you have that "certain_id"';
     }
}

在我的routes.php中:

Route::controller('custom','CustomController');

我非常确定certain_id未在会话中定义,但它始终一直持续到getAdd方法。我也尝试删除if语句但结果相同。

1 个答案:

答案 0 :(得分:0)

问题是php __construct()方法没有返回值(参见 void ):

 void __construct ([ mixed $args [, $... ]] )

这意味着你的return '...'被忽略了,所以当你调用getAdd()方法时,你说的是__construct()被调用(创建了一个新的类实例),但随后处理继续进行。

我不知道你想要实现什么,但是如果它是一些登录过滤你可以做

 public function __construct()
 {
      if(!Session::has('certain_id'))
         Response::redirect('login');
 }

因此,当certain_id不存在时,您将重定向到之外的另一个类。注意不要重定向到相同的类,否则你将冒无限循环的风险(类是实例化的,sesssion不存在,你被重定向到一个方法:创建一个新的实例,id仍然不存在,所以你再次被重定向,等等)