2016-11-11 4 views
0

呼ばれていない私は、管理コントローラを作成し、コンストラクタで管理者の役割を確認するためにlaravel親のコンストラクタを子コンストラクタ

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

} 

をロジックを追加し、私はいくつかの管理者にこのコントローラを拡張してきた、

をlaravel 5.2を使用していますコントローラー

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

醜い回避策は、あなたがそのコンストラクタに含まれているコードを解析したくないことを示すブールparamを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); 
    } 
} 
関連する問題