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

خطای property of a non-object در لاراول

سلام و عرض خسته نباشید😁😁😁

من توی کنترولرم توی دو تا فانکشن دو بار ی متغیر رو ساختم که اصلا اینکارم جالب نیست

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ProfileController extends Controller
{
    //

    public function upload_avatar( ){
        $username = Auth::user()->username;

    }
    public function show_avatar(){

        $username = Auth::user()->username;

    }
}

حالا با خودم گفتم که بیام ی متغیر global بسازم و توی فانکشن هام اونو صدا بزنم

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ProfileController extends Controller
{
    //
private $username;

   public function __construct()
    {
              $this->username = Auth::user()->username;
    }

    public function upload_avatar( ){
              $this->username
    }
    public function show_avatar(){

            $this->username

    }
}

چون حالا دیگه مجبور نیستم که بیام دو بار ی متغیر رو تعریف کنم

ولی با این خطا مواجه شدم :(

Laravel: Auth::user()->username trying to get a property of a non-object

لطفا کمکم کنید با تشکر :)


ثبت پرسش جدید
سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

بله دقیقا مثل کد اولتون روش هایی وجود داره که username رو توی کلاس تعریف کنید ولی خیلی سخت و پیچیده میشه بعد فقط یک متغیر هست نه یک متد


saman khoshghadam
تخصص : برنامه نویس وب
@thethinkerdev 3 سال پیش مطرح شد
0

سلام
توجه کنید این متد استاتیک user هیچی برگردانده(null) چون حتما شما کاربری لاگین نکردید وگرنه چنین چیزی پیش نمیاد شما این روت رو مخصوص کاربر ها کنید یا به روش های بسیار زیاد دیگر چک کنید تا مهمان ها نتونن وارد بشن
@ahmadrezabashari


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
0

دقت کن که Auth::user() کاربر لاگین کرده رو بر میگردونه. حالا اگر کاربر لاگین نباشه مقدارش null هست.
پس کدی که سعی در اجراش داری، بعضی مواقع حالت زیر رو پیدا میکنه:

null->username

که متن خطا هم داره دقیقا همین رو میگه. میگه که نمیتونم پراپرتی username رو از داده ای که آبجکت نیست بگیرم.


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

سلام متد Auth::user کاربر که فعال هست ( لاگین کرده) رو برمی گردونه. الان در این قسمت کاربر لاگین نکرده و مقدار هم null هست. برای این که چه کنید دو راه وجود داره:
1 توی روت Middleware به نام auth رو قرار بدید مثل:

Route::get('myurl',function () { ... })->middleware(['auth',/* other middlewares */]);

2 استفاده از متد check مثل:

if (\Auth::check()) {
   /* User is authenticated */
} else {
   /* User isn't authenticated */
}

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

سلام و عرض خسته نباشید
کاربر لاگین کرده!!!!!!
موضوع اینه که وقتی از روش اول یعنی تکرار کد ( کثیف کاری ) استفاده میکنم ،مقدار کاربر رو برمیگردونه !!

ولی در روش دوم این پیام خطا رو دریافت میکنم !!
@samkh.dev
@ali.bayat
@websaz


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
1

دوست عزیز کد نویسی کثیف دیگه چیه وقتی متد __construct ران میشه هنوز لاراول کامل بوت نشده در نتیجه null برمی گردونه.
باید در همون متد استفاده کنید


احمدرضا بشری
تخصص : برنامه نویسی وب و سرور
@ahmadrezabashari 3 سال پیش مطرح شد
0

@websaz

این کد من هست

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ProfileController extends Controller
{
    //

    private $username;
    public function __construct()
    {
        if (Auth::check()) {
            /* User is authenticated */
            $this->username = Auth::user()->username;

         } else {

            $this->username = "Not Found";

        }
    }

    public function upload_avatar( Request $request){

        echo $this->username;
    }

}

اینم روتی که براش تعریف کردم :

Route::group(['middleware' => ['auth'] , 'prefix' => 'users/'] , function(){

    // روت های مربوط به کنترولر مشخصات کاربری
    Route::post('profile/avatar/upload', [ProfileController::class , 'upload_avatar'])->name("upload_avatar");

});

خروجی رو به این صورت بر میگدردونه

Not Found 

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

پس یعنی منظورتون اینه که باید توی همون فانکشنی که تعریف کردم ازش استفاده کنم ؟؟؟ مثل کد زیر؟؟

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ProfileController extends Controller
{
    //

    public function upload_avatar( ){
        $username = Auth::user()->username;

    }

}

سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

بله دقیقا مثل کد اولتون روش هایی وجود داره که username رو توی کلاس تعریف کنید ولی خیلی سخت و پیچیده میشه بعد فقط یک متغیر هست نه یک متد


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

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