我正在使用laravel 5.2,
我创建了管理控制器并添加了逻辑来检查构造函数中的管理员角色
namespace App\Http\Controllers;
use Sentinel;
class AdminController extends Controller
{
public function __construct()
{
if(Sentinel::check())
{
if(!Sentinel::inRole('admin'))
{
return redirect("login");
}
}
else
{
return redirect("login");
}
}
}
我在一些管理控制器上扩展了这个控制器
namespace App\Http\Controllers;
use Request;
use App\Http\Controllers\AdminController;
use App\Http\Requests;
use Sentinel;
use App\User;
use DB;
class UserController extends AdminController
{
function __construct()
{
parent::__construct();
}
}
当我调用用户控制器时,调用admin构造函数但返回函数不能正常工作,如果我添加die;在返回之前它会死掉,但在返回后没有任何东西受到影响。 所以它没有正确地返回重定向功能。
答案 0 :(得分:0)
丑陋的解决方法是将一个布尔参数传递给Papa,表明您不希望解析其构造函数中包含的代码。即:
// main class that everything inherits
class Grandpa extends Controller
{
public function __construct()
{
}
}
class Papa extends Grandpa
{
public function __construct($bypass = false)
{
// only perform actions inside if not bypassing
if (!$bypass) {
}
// call Grandpa's constructor
parent::__construct();
}
}
class Kiddo extends Papa
{
public function __construct()
{
$bypassPapa = true;
parent::__construct($bypassPapa);
}
}