2016-11-11 37 views
0

我使用laravel 5.2,laravel父类的构造不叫孩子构造

我已经创建了管理控制器和添加逻辑构造检查admin角色

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(); 
    } 
} 

当我调用用户控制器管理构造函数被调用但返回功能不正常,如果我加死;在返回之前它会死亡,但返回后不会受到影响。 因此它不能正确返回重定向功能。

回答

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