جدول المحتويات
تحتوي لارافيل على مجموعة من الدوال الجاهزة التي يمكن إستخدامها أثناء العمل وتعتبر redirect، واحده من أكثر الدوال إستخداماً، في هذه المقالة سيتم الحديث عن كيفية إستخدامها وما هي الخيارات المتاحة لنا عند إستخدامنها لها.
في البداية سأفترض أن لدينا دوال بداخل كنترولر وسنقوم بتحويل المستخدم لأي مكان داخل التطبيق.
public function index() { return redirect('welcome'); }
هنا سيتم تحويل المستخدم إلى الرابط www.test.test/welcome ، ونستطيع أيضا تمرير صفحات أخرى كـ parameter
Route::get('/dashboard', function () { return redirect('/home/dashboard'); });
public function dashboard() { return redirect('/home/dashboard'); }
يوجد دول أخرى متاح إستخدامها مع redirect، فإذا أردنا أن يتم إرجاع المستخدم للصفحة السابقة، بإمكاننا إستخدام back
return redirect()->back();
يمكننا إيضا إستخدام
return back();
بعض المطورين وأنا منهم يفضلون إعطاء إسم للمسارات named routes، فماذا لو أردنا أن يتم إعادة توجية المستخدم لقائمة المنشورات بعد أن يتم إضافة منشور جديد
return redirect()->route('posts.index');
كما يمكننا تمرير parameters أخرى ، ولتوضيح ذلك لنفرض أن لدينا رابط يقوم بتحميل صفحة تعديل المقالات
use App\Http\Controllers\PostController; return redirect()->action([PostController::class, 'index']);
بإمكاننا أن يتم إعادة تحويل المستخدم لنفس الصفحة بإستخدام الكود التالي
return redirect()->route('post.edit', ['id' => $post->id]);
ببعض الأحيان نريد إعادة توجيه المستخدم لصفحة معينة وإرسال بيانات، وهنا توفر لنا لارافيل دالتين with و withInput :
with
return redirect()->back()->with('success', 'Post saved successfully.');
في الدالة أعلاه سيتم إعادة توجيه المستخدم للصفحة السابقة وإضافة المفتاح success مع قيمة هذا المفتاح، وسيتم إرسالة إلى session flash ويمكننا إستقبالها من خلال إستخدام session
session('success');
كما يمكننا إستخدام أكثر من with
return redirect()->back() ->with('success', 'Post saved successfully.') ->with('post_id', $post->id);
ولجعل الكود أعلاه أكثر أناقة، وأكثر قابلية للقراءة، يفضل إستخدام مصفوفة بالمعلومات التي نريد إرسالها
$response = [ 'success' => 'Post saved successfully.', 'post_id' => $post->id, ]; return redirect()->back()->with($response);
withInput
تستخدم هذه الدالة عندما نريد إرجاع بيانات إلى فورم معين،
$validator= $this->validate($request, [ 'name' => 'required', ]); if ($validator->fails()) { return redirect()->back()->withInput()->withErrors($validator); }
وفي ملف blade يمكن إستخدام old($key) لطباعة القيمة
<input name="name" value="{{ old('name') }}">
في لارافيل يمكننا التحويل أيضا إلى دالة داخل الكونترولر مثلها مثل إطار العمل Symfone، ويتم ذلك من خلال دالة action
return redirect()->action([HomeController::class, 'index']);
كما يمكن تمرير بعض المعلمات parameters
return redirect()->action( [PostController::class, 'profile'], ['id' => 1] );
هذا ما أعلمة عن عملية redirect، إذا أردت المزيد يمكنك التوجه لموقع لارافيل الرسمي، وإذا كان لديك أي إستفسار بإمكانك إضافته في صندوق التعليقات أدناه.
شكرا جزيلا
mohd
بارك الله فيك .. جزاك الله كل خير .. أرجو الاستمرار لأني تعلمت الكثير منك ولا زلت كذلك