【问题标题】:I use url in action and get 404 not found but route is exist and when I use route I get error route is not defined in Laravel我在操作中使用 url 并得到 404 not found 但路由存在,当我使用路由时,我得到错误 route is not defined in Laravel
【发布时间】:2021-10-13 17:08:45
【问题描述】:

我想要一个在数据库中存储speaker/book 的订单,但我不使用图表,因此在填写文本字段后,它将被插入到数据库表中,并且只有登录用户才能进行预订。下面我的程序逻辑流程是错误的吗?当我使用这个

<form method="POST" action="{{ url('speaker/book-store') }}">
    @csrf
</form>

我收到错误 404 未找到但我在 web.php 中的路线存在 这里web.php

Route::get('/speaker/book', ' App\Http\Controllers\ProductController@create')-> name('speaker/book-create');
Route::post('/speaker/book', 'App\Http\Controllers\ProductController@store')->name('speaker/book-store');

但是当我使用路由而不是这样的 URL 时:

<form method="POST" action="{{ route('speaker/book-store') }}">
    @csrf
</form>

我得到错误路由未定义:

这是我的ProductController

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Order;
use App\Models\User;
use Auth;
class ProductController extends Controller {
    public function create() {
        return view('speaker/book');
    }

    public function store(Request $request) {
        $order =new Order();
        $order->date=$request->input('date');
        $order->date=$request->input('time');
        $order->date=$request->button('acara');
        $order->date=$request->textarea('detail');
        Auth::user()->orders()->save($order);

        return redirect()->back()->with('success'); 
    }
}

模型顺序

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Order extends Model {
    use HasFactory;

    public function user() {
        return $this-> belongsTo('App\User');
    }
}

我这样添加的模型用户:

public function orders() {
    return $this->hasMany('App\Order');
}

【问题讨论】:

  • 清除路线然后尝试php artisan route:clear
  • 这些路线的命名约定不是好的做法,请遵循不带斜线的做法,例如 - “speaker.book_create” 作为名称
  • @csrf
    在这个例子中,URL 是错误的
  • @RushikeshGanesh 您好,先生,提前感谢您的帮助。我已经更改为名称 web.php 中的这个 speaker.book_create,我的 url 是这样的
    。我不断收到 404 not found 。顺便说一句,我在托管后在实时服务器上编辑了这个,我很困惑如何运行命令行
  • 你又做错了应该是那个"{{ route('speaker.book-store') }}"

标签: php laravel routes http-status-code-404 storing-data


【解决方案1】:

您定义的路线不正确,网址不应相同

旧路线

Route::get('/speaker/book', function() { return view('speaker/book'); }); 

Route::get('/speaker/book', ' App\Http\Controllers\ProductController@create')
 ->name('speaker.book-create');

Route::post('/speaker/book', 'App\Http\Controllers\ProductController@store')
 ->name('speaker.book-store'); 

新路线 - 试试这条路线

Route::get('/speaker/book/view', function() { return view('speaker/book'); });

Route::get('/speaker/book/create', 
'App\Http\Controllers\ProductController@create')->name('speaker.book-create');

Route::post('/speaker/book/store', 
'App\Http\Controllers\ProductController@store')->name('speaker.book-store'); 

book.blade.php 的作用

 {{ route('speaker.book-store') }}

了解一件事,即使提供到 form-action 的路由,在发布表单时它会转换为 URL,因为您的相同 URL 定义它会发生冲突

【讨论】:

    【解决方案2】:

    更新这些路线。

    Route::get('/speaker/book',[App\Http\Controllers\ProductController::class, 'create'])-> name('speaker/book-create');
    Route::post('/speaker/book', [App\Http\Controllers\ProductController::class, 'store'])->name('speaker/book-store');
    

    然后运行php artisan optimize

    我希望你能得到你的解决方案。

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 2017-09-28
      • 2023-03-20
      • 2020-07-10
      • 2019-10-13
      • 2023-01-12
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      相关资源
      最近更新 更多