0

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

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语句,但结果相同。

4

1 回答 1

0

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

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

这意味着您return '...'只是被忽略了,因此当您调用该getAdd()方法时,您正确地说 __construct() 被调用(创建了该类的一个新实例),但随后处理继续到该方法。

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

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

这样,当那certain_id不存在时,您就会被重定向到外面,进入另一个班级。注意不要重定向到同一个类,否则你会冒无限循环的风险(类被实例化,会话不存在,你被重定向到一个方法:创建了一个新实例,id 仍然不存在,所以你会再次被重定向,依此类推)

于 2013-10-14T05:22:11.487 回答