قرأت حل هذا السؤال لكنه لم يحل مشكلتي. لذلك أنا أكتب واحدة جديدة.
لدي صفحة يكتب فيها المستخدم مراجعة حول منتج. يحتاج المستخدم إلى تسجيل الدخول لكتابة مراجعة.
يبدو إجراء وحدة التحكم الذي يعالج المراجعة كما يلي:
public function postWriteReview(Request $request, $id)
{
$this->validate($request, [
'review' => 'required|min:5',
]);
$user = Auth::user();
$review = new Review([
'review' => $request->input('review'),
'user_id' => Auth::id(),
'product_id' => $id,
'rating' => 2.5
]);
$review->save();
return redirect()->back()->with('info', 'Review Recorded. Thank You for the Review');
}
وملف مساراتي يبدو كالتالي:
Route::get('/', function () {
return view('section.home');
})->name('home');
Route::get('products', [
'uses' => '[email protected]',
'as' => 'section.products'
]);
Route::get('products/{id}', [
'uses' => '[email protected]',
'as' => 'section.product'
]);
Route::post('write/{id}',[
'uses' => '[email protected]',
'as' => 'write',
'middleware' => 'auth'
]);
Auth::routes();
مشكلة
- كل شيء يعمل بشكل جيد عندما يقوم المستخدم بتسجيل الدخول بالفعل ويقدم مراجعة.
- عندما لم يقم المستخدم بتسجيل الدخول بالفعل ، فإن إرسال المراجعة يعيد توجيهه إلى صفحة تسجيل الدخول. عندما يقوم المستخدم بتسجيل الدخول بنجاح ، تتم إعادة توجيهه إلى الصفحة السابقة ولكن يتم طرح MethodNotAllowedHttpException .
كما هو مقترح في إجابة هذا السؤال ، حاولت السماح لكل من GET و POST بهذا المسار مثل:
Route::match(['GET', 'POST'],'write/{id}',[
'uses' => '[email protected]',
'as' => 'write',
'middleware' => 'auth'
]);
مع وضع هذا في مكانه ، اختفت MethodNotAllowedHttpException ولكن تتم إعادة توجيه المستخدم إلى الصفحة الرئيسية بدلاً من المتابعة وحفظ الاستعراض في قاعدة البيانات.
- لماذا يحدث هذا؟
- ما هو الحل الممكن؟
إصدار Laravel: 5.6