راکت
حل شده

مشکل نمایش اطلاعات در AppServiceProvider

3 پاسخ

سلام
میخوام در متد boot در appServiceProvider یکسری اطلاعات را به تمام روتها پاس بدم ولی خطا میده
در صورتی که شرطهای داخل متد زیر را وقتی در یک کنترلر میزارم درسته

مشکل چیه ؟
متن خطا

Trying to get property 'userRole' of non-object

کد

  public function boot()
    {
        Schema::defaultStringLength(191);

        if (Auth::user()->userRole->role == 1) {
            $user_role = 'دانش آموز';
        }
        if (Auth::user()->userRole->role == 2) {
            $user_role = 'مدرس';
        }
        if (Auth::user()->userRole->role == 3) {
            $user_role = 'اپراتور';
        }
        if (Auth::user()->userRole->role == 10) {
            $user_role = 'ادمین کل';
        }
        View::share(compact('user_role'));
    }
}
ثبت پرسش جدید

پاسخ‌ها

3
سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

بهترین پاسخ

@yk5742g
سلام.
وقتی چنین اروری دریافت میکنید مشخصا این قسمت از کد شما Auth::user() اطلاعات و اون آبجکت مورد انتظار رو برنمیگردونه و با برگشت دادن Null به این ارور میخورید.

حالا دلیل اصلی اینکه دریافت نمیکنید چیه ؟

  • توی مراحل boot ( راه اندازی ) شدن فریمورک ، متد های register و boot به ترتیب روی تمامی Service Provider ها صدا زده میشه تا اینکه فریمورک راه اندازی بشه.
  • به همین دلیل عملا توی این مرحله که جزء مراحل اولیه راه اندازی لاراول هست احراز هویتی (Authentication) صورت نگرفته که بتونید با فساد Auth یا هر راه دیگه ای به کاربر احراز هویت شده دسترسی داشته باشید.

    دقیق نمیدونم راه جایگزینی باشه یا نه این رو باید دوستان با تجربه تر بیان کنن اما شما با کدی که دارید همیشه بجای آبجکت کاربر ، مقدار Null دریافت خواهید کرد.

سینا خاقانی
سینا خاقانی
@sina.it91

تخصص: توسعه دهنده بک‌اند

@yk5742g
سلام
شما در مدل یوزر ریلیشنی به نام userRole ایجاد کردی؟
این خطا میگه چنین ریلیشنی وجود نداره

نوب
نوب
@yk5742g

تخصص: کدنویس نوب :)

بله ایجاد کردم

عرض کردم که اگر همین کد را توی کنترلر بزارم درست کار میکنه

شاید پاسخ شما همین‌جا باشد

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

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