2016-11-11 71 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); 
    } 
}