laravel父构造函数不会调用子构造函数

时间:2016-11-11 14:49:08

标签: php laravel laravel-5 laravel-5.2

我正在使用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;在返回之前它会死掉,但在返回后没有任何东西受到影响。 所以它没有正确地返回重定向功能。

1 个答案:

答案 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);
    }
}