Alireza Kafi
5 سال پیش توسط Alireza Kafi مطرح شد
1 پاسخ

فراخوانی متود کلاس والد در تمام متود های کلاس های فرزند

سلام
من یه کنترلر دارم به اسم DashboardController که چک میکنه اگه یوزر ادمین باشه میفرستتش پنل ادمین اگه نه میفرسته پنل یوزر ، بعد از این کنترلر یه فرزند به اسم AdministratorDashboardController و UserDashboardController دارم که صفحه مربوط به پنل کاربر خودشونو بر میگردونن ، کنترلر های ریسورس مربوط به ادمین هم از AdministratorDashboardController ارث بری میکنند ، یوزر هم به همین شکل ...
من الان مشکلم اینه که میخام چک کنم که اگه یوزر لاگین کرده ، اطلاعات مربوط به profile شو وارد نکرده باشه نتونه به پنل ادمین و تمام بخش هاش (که هر کدوم کنترلر ریسورس خودشونو دارن) دسترسی داشته باشه و مثلا ریدایرکت بشه به صفحه ساخت پروفایلش ، ولی میخوام بدونم راهی هست که تو تمام کنترلر های فرزند این قضیه چک بشه و من مجبور نباشم تو تک تک متود های کنترلر ریسورس و ... فراخوانیش کنم ؟؟؟؟؟

  • اینم بگم این کاری رو که میخوام تونستم با middleware انجام بدم ولی میخوام با کنترلر چک بشه.

این کنترلر DashboardController

class DashboardController extends Controller
{
    public function __construct()
    {
        $this->middleware(['auth:web']);
    }

    public function index()
    {
        if(Auth::check()){
            if(Auth::user()->getUserType() == 'administrator') {
                return redirect(route('administrator.dashboard'));
            }
            if(Auth::user()->getUserType() == 'user') {
                return redirect(route('user.dashboard'));
            }
        }
        return redirect(route('/'));
    }

    protected function checkUserHasProfile() {
        if(Auth::check()) {
            return Auth::user()->hasProfile();
        }
        return redirect(route('login'));
    }

}

این کنترلر AdministratorDashboardController

class AdministratorDashboardController extends DashboardController
{
    public function __construct() {
        parent::__construct();
        $this->middleware(['CheckAdministrator']);
    }

    public function index()
    {
        if(!$this->checkUserHasProfile()) {
            return redirect(route('profiles.create'));
        }
        return view('administrator.index');
    }
}

ثبت پرسش جدید
Mohsen Hassanshahi
تخصص : برنامه نویس
@a.hassanshahi74 5 سال پیش آپدیت شد
0

سلام از middleware استفاده کنید،
یعنی یه middleware جدید بسازید،
البته به این نکته توجه کنید که از لاراول 5.3 به بعد شما از session ها در متد های construct نمی تونید استفاده کنید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام