我正在添加用户评论/评级到我的laravel 9应用程序,但当我点击评级按钮时,我得到404|未找到,联机搜索后没有帮助

mwg9r5ms  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(121)

功能名称为store,在刀片视图中也是如此。一个用户可以对多个产品进行评级,但用户必须先登录才能访问评级

这是刀片代码

  1. <h2>{{ $product->name }}</h2>
  2. <p>{{ $product->description }}</p>
  3. <h3>Reviews</h3>
  4. <ul>
  5. @foreach ($product->reviews as $review)
  6. <li>{{ $review->review }} - {{ $review->rating }} stars</li>
  7. @endforeach
  8. </ul>
  9. <h3>Add a Review</h3>
  10. <form method="POST" action="/products/{{ $product->id }}/reviews">
  11. @csrf
  12. <div>
  13. <label for="review">Review</label>
  14. <textarea name="review" id="review">{{ old('review') }}</textarea>
  15. @error('review')
  16. <div>{{ $message }}</div>
  17. @enderror
  18. </div>
  19. <div>
  20. <label for="rating">Rating</label>
  21. <input type="number" name="rating" id="rating" min="1" max="5" value="{{ old('rating') }}">
  22. @error('rating')
  23. <div>{{ $message }}</div>
  24. @enderror
  25. </div>
  26. <button type="submit">Submit Review</button>
  27. </form>

控制器。用户可以为单个产品评分1-5

  1. public function store(Product $product)
  2. {
  3. $data = request()->validate([
  4. 'review' => 'required|string',
  5. 'rating' => 'required|integer|min:1|max:5',
  6. ]);
  7. $review = new Review($data);
  8. $review->user_id = auth()->user()->id;
  9. $product->reviews()->save($review);
  10. return back();

路线

  1. Route::post('/products/{product}/reviews', [HomeController::class, 'store']);
  2. Route::middleware(['auth'])->group(function () {
  3. Route::post('/products/{product}/reviews', [HomeController::class, 'store']);

数据库

  1. $table->unsignedBigInteger('product_id');
  2. $table->unsignedBigInteger('user_id');
  3. $table->text('review');
  4. $table->integer('rating');
  5. $table->timestamps();
  6. $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
  7. $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
ff29svar

ff29svar1#

您可以使用以下方法修复错误:
为您的路线添加名称:

  1. Route::post('/products/{product}/reviews', [HomeController::class, 'store'])->name('store.review');

更新表单的操作:

  1. <form method="POST" action="{{ route('store.review', ['product' => $product->id]) }}">

相关问题