سلام و عرض خسته نباشید😁😁😁
من توی کنترولرم توی دو تا فانکشن دو بار ی متغیر رو ساختم که اصلا اینکارم جالب نیست
<?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
لطفا کمکم کنید با تشکر :)
بله دقیقا مثل کد اولتون روش هایی وجود داره که username رو توی کلاس تعریف کنید ولی خیلی سخت و پیچیده میشه بعد فقط یک متغیر هست نه یک متد
سلام
توجه کنید این متد استاتیک user هیچی برگردانده(null) چون حتما شما کاربری لاگین نکردید وگرنه چنین چیزی پیش نمیاد شما این روت رو مخصوص کاربر ها کنید یا به روش های بسیار زیاد دیگر چک کنید تا مهمان ها نتونن وارد بشن
@ahmadrezabashari
دقت کن که Auth::user() کاربر لاگین کرده رو بر میگردونه. حالا اگر کاربر لاگین نباشه مقدارش null هست.
پس کدی که سعی در اجراش داری، بعضی مواقع حالت زیر رو پیدا میکنه:
null->username
که متن خطا هم داره دقیقا همین رو میگه. میگه که نمیتونم پراپرتی username رو از داده ای که آبجکت نیست بگیرم.
سلام متد 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 */
}
سلام و عرض خسته نباشید
کاربر لاگین کرده!!!!!!
موضوع اینه که وقتی از روش اول یعنی تکرار کد ( کثیف کاری ) استفاده میکنم ،مقدار کاربر رو برمیگردونه !!
ولی در روش دوم این پیام خطا رو دریافت میکنم !!
@samkh.dev
@ali.bayat
@websaz
دوست عزیز کد نویسی کثیف دیگه چیه وقتی متد __construct
ران میشه هنوز لاراول کامل بوت نشده در نتیجه null برمی گردونه.
باید در همون متد استفاده کنید
این کد من هست
<?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
پس یعنی منظورتون اینه که باید توی همون فانکشنی که تعریف کردم ازش استفاده کنم ؟؟؟ مثل کد زیر؟؟
<?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;
}
}
بله دقیقا مثل کد اولتون روش هایی وجود داره که username رو توی کلاس تعریف کنید ولی خیلی سخت و پیچیده میشه بعد فقط یک متغیر هست نه یک متد
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟