- إنشاء عمليات إعادة التوجيه (Redirects)
- إعادة التوجيه لمسارات (routes) ذات أسماء
- إعادة التوجيه لعمليات المتحكم (controller actions)
- إعادة التوجيه مع بيانات مخزنة مؤقتاً في الجلسة (Flashed Session Data)
إن ردود إعادة التوجيه (redirect responses) هي نُسخ (instances) من الكائن Illuminate\Http\RedirectResponse
تحتوي على الترويسات (headers) المطلوبة لإعادة توجيه المستخدم لرابط URL أخر. يوجد عدة طرق لإنشاء نسخة من الكائن RedirectResponse
وأبسطها هو استعمال التابع المساعد redirect
:
Route::get('/dashboard', function () {
return redirect('/home/dashboard');
});
أحياناً قد ترغب بإعادة توجيه المستخدمين لموقعهم السابق، كما في حالة إرسالهم لبيانات استمارة (form) خاطئة. يمكنك ذلك باستخدام التابع المساعد back
. وبما أن هذه الميزة تعتمد على الجلسة (session) تأكد بأن استدعاء التابع back
يستعمل مجموعة البرمجيات الوسيطة (middleware group) التالية web
أو أنه يخضع لتطبيق جميع البرمجيات الوسيطة (middleware) الخاصة بالجلسة:
Route::post('/user/profile', function () {
// Validate the request...
return back()->withInput();
});
عندما تستخدم التابع المساعد redirect
بدون تمرير وسطاء سيتم إعادة نسخة (instance) من نوع Illuminate\Routing\Redirector
، مما يسمح لك باستدعاء أي طريقة على النسخة Redirector
. على سبيل المثال لإنشاء رد RedirectResponse
على مسار ذو اسم (named route) يمكنك استخدام الطريقة route
:
return redirect()->route('login');
وفي حال كون المسار (route) يحتوي على وسطاء يمكنك تمريرهم كوسيط ثانٍ للطريقة route
:
// For a route with the following URI: profile/{id}
return redirect()->route('profile', ['id' => 1]);
اذا كنت تعيد التوجيه لمسار (route) يحوي على وسيط "ID" خاص بنموذج (Eloquent Model)، يمكنك تمرير النموذج (model) نفسه. حيث أنه سيتم استخراج الخاصية "ID" تلقائياً:
// For a route with the following URI: profile/{id}
return redirect()->route('profile', [$user]);
اذا كنت تريد تغيير القيمة التي يتم استخراجها عند تمرير النموذج كوسيط للمسار (route) يجب عليك عمل override للطريقة getRouteKey
في النموذج (Eloquent Model) الخاص بك.:
/**
* Get the value of the model's route key.
*
* @return mixed
*/
public function getRouteKey()
{
return $this->slug;
}
يمكنك أيضاً إنشاء إعادة توجيه (redirect) لعمليات متحكم (controller actions) عن طريق تمرير المتحكم واسم العملية للطريقة action
:
use App\Http\Controllers\HomeController;
return redirect()->action([HomeController::class, 'index']);
في حال كان مسار المتحكم يحتاج لوسطاء يمكنك تمريرهم كوسيط ثانٍ للطريقة action
:
return redirect()->action(
[UserController::class, 'profile'], ['id' => 1]
);
إن عملية إعادة التوجيه لرابط (URL) جديد مع تخزين بيانات بشكل مؤقت في الجلسة (flashing data to the session) يتم عادة بنفس الوقت. ويتم ذلك بعد تنفيذ إجراء ما بنجاح فتقوم بتخزين رسالة نجاح في الجلسة (session). للسهولة يمكنك انشاء نسخة (instance) من الكائن RedirectResponse
وتخزينها مؤقتاً في الجلسة في طريقة فردية سلسة ومتسلسلة:
Route::post('/user/profile', function () {
// Update the user's profile...
return redirect('/dashboard')->with('status', 'Profile updated!');
});
يمكنك استخدام الطريقة withInput
التي تقدمها النسخة (instance) من الكائن RedirectResponse
لتخزين بيانات الدخل الخاصة بالطلب (request) الحالي في الجلسة قبل إعادة توجيه المستخدم لمكان جديد. وعندما يتم تخزين البيانات في الجلسة يمكنك استعادتها بسهولة خلال الطلب (request) التالي:
return back()->withInput();
بعد إعادة توجيه المستخدم يمكنك عرض الرسالة التي تم تخزينها مؤقتاً في الجلسة. على سبيل المثال باستخدام تركيب Blade التالي:
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif