带有连字符 404 错误的 Laravel 路由参数

Posted

技术标签:

【中文标题】带有连字符 404 错误的 Laravel 路由参数【英文标题】:Laravel route parameter with hyphen 404 error 【发布时间】:2020-11-15 20:02:32 【问题描述】:

嗨,今天我在使用 laravel 框架时遇到了这个问题。我想为 Category 模型创建动态 SEO 链接,但遇到了路由参数问题。

这是我在web.php的路线:

Route::get('transport/category?', 'JobController@index');

这是路由重定向到的方法:

public function index(Category $category = null)

    if ($category) 
        $jobs = Job::whereCategoryId($category->id)->orderBy('id', 'desc')->paginate(10);
     else 
        $jobs = Job::orderBy('id', 'desc')->paginate(10);
    

    return view('jobs')->with([
        'jobs'             => $jobs,
        'categories'       => Category::all(),
        'current_category' => $category,
    ]);

Category 表如下所示:

Schema::create('categories', function (Blueprint $table) 
    $table->increments('id');
    $table->string('name');
    $table->string('token');
    $table->longText('description');
    $table->timestamps();
);

Jobcategory 相关:

$table->integer('category_id');

/transport/furniture 之类的路由有效,但/transport/other-vehicles 之类的路由无效,我收到 404 错误。

【问题讨论】:

你能在这里分享类别模型吗?您是否在模型中的getRouteKeyName 中设置了默认键名? 您是否设置了路由模型绑定以使用 slug? @Aashishgaba 你救了我的命,谢谢你提供的线索。这是public function getRouteKeyName() return 'name'; 之前的类别模型,我将其更改为public function getRouteKeyName() return 'token'; 并且它有效! @KurtFriars 也感谢您的回复 【参考方案1】:

我一开始传递的参数是来自Category 模型的name。然后我对代码进行了更改,添加了token 列并开始传递它。应用程序仍然需要 name 而不是 token,所以我更改了从 getRouteKeyName() 返回的值,它可以工作!

之前

public function getRouteKeyName()

    return 'name';

之后

public function getRouteKeyName()

    return 'token';

【讨论】:

以上是关于带有连字符 404 错误的 Laravel 路由参数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 路由错误 404

laravel 路由和 404 错误

Laravel:如何根据路由响应自定义 404 错误

更改参数顺序的 Laravel 路由中出现 404 错误

Laravel 重定向到一个路由,但是 apache 给出 404 错误

Ajax 在 Laravel 8 中返回 404 错误但路由存在