【问题标题】:laravel parent constructor does not called child constructorlaravel 父构造函数不调用子构造函数
【发布时间】:2016-11-11 14:49:07
【问题描述】:

我使用的是 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();
  }
}

当我调用用户控制器管理构造函数被调用但返回函数不能正常工作时,如果我添加 die;在返回之前它会死,但在返回之后没有任何影响。 所以它不能正确返回重定向功能。

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.2


    【解决方案1】:

    丑陋的解决方法是向 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多