Laravel: MethodNotAllowedHttpException طرح بعد تسجيل دخول المستخدم

0

قرأت حل هذا السؤال لكنه لم يحل مشكلتي. لذلك أنا أكتب واحدة جديدة.

لدي صفحة يكتب فيها المستخدم مراجعة حول منتج. يحتاج المستخدم إلى تسجيل الدخول لكتابة مراجعة.

يبدو إجراء وحدة التحكم الذي يعالج المراجعة كما يلي:

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

1 إجابة

0

ضع واقي المصادقة في طريقة postWriteReview () الخاصة بك ، لذلك إذا أرسل مستخدم غير مصرح له مراجعة ، فسيتم إعادة توجيهه إلى الصفحة الرئيسية على الفور. من الناحية المثالية ، يجب عليك وضع وسيط مصادقة على الصفحة حيث يمكنهم كتابة المراجعة ، وإذا لم يكن مستخدمًا مصرحًا له ، فلا تعرض نموذج المراجعة. بهذه الطريقة ، لا يضيعون وقتهم في كتابة مراجعة عندما لا يتم تسجيل دخولهم ولا يمكنهم النشر.

public function postWriteReview(Request $request, $id)
{
if (!Auth::check()) return redirect()->route('home');

    $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');
}
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام