نوب
3 سال پیش توسط نوب مطرح شد
3 پاسخ

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

سلام
میخوام در متد 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'));
    }
}

ثبت پرسش جدید
سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 3 سال پیش آپدیت شد
0

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

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

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

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


سینا خاقانی
تخصص : توسعه دهنده بک‌اند
@sina.it91 3 سال پیش مطرح شد
0

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


نوب
تخصص : کدنویس نوب :)
@yk5742g 3 سال پیش مطرح شد
0

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

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


سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 3 سال پیش آپدیت شد
0

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

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

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

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


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

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