ميزات Laravel 11 التي ستغير طريقة كتابتك للكود: شرح شامل بالأمثلة
يقدم هذا المقال شرحاً مبسطاً وواضحاً لأهم الميزات الجديدة في Laravel 11، وكيف تساعد ال�
متابعة القراءة
الكاتب : hamza ougjjou
نشر في : 17-02-2026
أولاً، تأكد من تثبيت Laravel. يمكنك إنشاء مشروع Laravel جديد عن طريق تشغيل الامر التالي
laravel new laravel-custom-auth
او تتبع المراحل في laravel documentation
بعد الانتهاء من تحميل ملفات المشروع نقوم بتعديل ملف ال migration الخاص بجدول users
...
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id(); //المعرف الخاص بكل مستخدم
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable(); //حقل يستخدم للتأكد من ادا ثم تأكيد البريد الالكتروني
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
...
عمل migration للجدول
php artisan migrate
تعديل user model بحيث نسمح له بان يرث من Authenticatable class للسماح له بتنفيد عمليات تسجيل الدخول (authentication) , و ايضا لا تنسى عمل implemtaion لكلاس MustVerifyEmail اللدي سيساعد في ارسال email تأكيد الحساب للمستخدم عند انشاء حساب جديد
ملف User.php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use HasFactory, Notifiable;
protected $fillable = [
'name',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
}
AuthController هو الملف الدي سيتحكم في جميع العمليات المنطقية الخاصة بانشاء الحساب , تسجيل الدخول , تسجيل الخروج و كدالك ارسال ؤابط تأكيد البريد الالكتروني
php artisan make:controller auth\AuthController
و هدا كود ال AuthController مع شرح كل جزء منه
namespace App\Http\Controllers\api;
use App\Http\Controllers\Controller;
use App\Http\Requests\LoginRequest;
use App\Http\Requests\RegisterRequest;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
// تحويل المستخدم الى صفحة انشاء الحساب
public function register()
{
return view('auth.register');
}
public function register_store(RegisterRequest $request)
{
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
//تسجيل الدخول للمستخدم
Auth::login($user);
// ارسال رسالة عبر البريد الالكتروني تحتوي على رابط تأكيد الاميل
$user->sendEmailVerificationNotification();
//توجيه المستخدم الي ملفه الشخصي
return redirect()->route('profile')->with('success', 'Registration successful! Welcome.');
}
//تحويل المستخدم الى صفحة تسجيل الدخول
public function login(Request $request)
{
return view('auth.login');
}
public function login_store(LoginRequest $request)
{
// محاولة التحقق من بيانات تسجيل الدخول باستخدام البريد الإلكتروني وكلمة المرور
if (Auth::attempt($request->only('email', 'password'))) {
// إذا تم تسجيل الدخول بنجاح
$request->session()->regenerate(); // تجديد الجلسة لمنع هجمات "تثبيت الجلسات"
// إعادة توجيه المستخدم إلى الصفحة المطلوبة أو لوحة التحكم
return redirect()->route(route: 'profile')->with('success', 'Registration successful! Welcome.');
}
// إذا كانت بيانات الاعتماد خاطئة
return back()->withErrors([
'email' => 'The provided credentials are incorrect.', // رسالة الخطأ لحقل البريد الإلكتروني
])->onlyInput('email'); // إبقاء حقل البريد الإلكتروني معبأً عند إعادة المحاولة
}
public function logout()
{
//session تسجيل الخروج و حدف
Auth::logout();
// توجيه المستخدم الى الصفحة الرئيسية
return redirect()->route('home')->with('success', 'You have been logged out successfully.');
}
}
ملف RegisterRequest
php artisan make:request RegisterRequest
ملف RegisterRequest ستجده في المسار التالي
App\Http\Requests\RegisterRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RegisterRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true; // Allow all users to access this request
}
/**
* Get the validation rules that apply to the request.
*/
//رسائل الاخطاء في حال المستخدم لم يدخل المعلومات بصيغة صحيحة
public function rules(): array
{
return [
'name' => 'required|string|min:2|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:6',
'password_confirmation' => 'required|string|min:6|same:password',
];
}
/**
* Get custom messages for validation errors.
*/
public function messages(): array
{
return [
'name.required' => 'The name field is required.',
'email.required' => 'The email field is required.',
'email.email' => 'Please provide a valid email address.',
'email.unique' => 'This email is already registered.',
'password.required' => 'The password field is required.',
'password.min' => 'The password must be at least 6 characters long.',
'password.confirmed' => 'The password confirmation does not match.',
];
}
}
ملف LoginRequest
php artisan make:request LoginRequest
ملف LoginRequest ستجده في المسار التالي
App\Http\Requests\LoginRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LoginRequest extends FormRequest
{
public function authorize()
{
return true; // السماح بتنفيذ الطلب لجميع المستخدمين
}
public function rules()
{
return [
'email' => 'required|email', // البريد الإلكتروني يجب أن يكون موجودًا وبصيغة صحيحة
'password' => 'required|min:6', // كلمة المرور يجب أن تكون موجودة ولا تقل عن 6 أحرف
];
}
public function messages()
{
//رسائل الاخطاء في حال المستخدم لم يدخل المعلومات بصيغة صحيحة
return [
'email.required' => 'Email is required.',
'email.email' => 'Please provide a valid email address.',
'password.required' => 'Password is required.',
'password.min' => 'Password must be at least 6 characters long.',
];
}
}
use App\Http\Controllers\api\AuthController;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
Route::view("/" , "welcome")->name("home");
Route::get('/login', [AuthController::class , 'login'])->name('login');
Route::post('/login', [AuthController::class , 'login_store'])->name('login.store');
Route::get('/register', [AuthController::class , 'register'])->name('register');
Route::post('/register', [AuthController::class , 'register_store'])->name('register.store');
Route::post('/logout', [AuthController::class , 'logout'])->name('logout')->middleware('auth');;
Route::view('/profile', "auth.profile")->name('profile')->middleware('auth');;
// Email Verification Routes
Route::view('/email/verify', "auth.verify-email" )->middleware('auth')->name('verification.notice');
Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
$request->fulfill(); // Mark the user's email as verified
return redirect('/profile'); // Redirect after verification
})->middleware(['auth', 'signed'])->name('verification.verify');
Route::post('/email/verification-notification', function (Illuminate\Http\Request $request) {
$request->user()->sendEmailVerificationNotification(); // Resend the verification email
return back()->with('message', 'Verification email sent!');
})->middleware(['auth', 'throttle:6,1'])->name('verification.resend');
lmYbQXhSccVaXepZCQJvAl
WvjzmQOFQvKaBiHwjhWKEUU
TWhiiKzPNyryTQhoTBpkP
McLIUjUvYUVmIZkXdBEh