如何在 Resource Routes url 中显示 id?

How to show id in Resource Routes url?

更新:

前端的这行代码是罪魁祸首:

<inertia-link v-if="options.edit" :href="'/admin/gallery/edit/1'">

我不得不将其更改为:

<inertia-link v-if="options.edit" :href="'/admin/gallery/1/edit'">

使其符合@Babak 提供的 editlaravel resource format

原文Post:

如何在 web.php:

中转换这条路线
Route::get('/admin/gallery/edit/{id}', function ($id) {
    $data = Gallery::find($id);
    return inertia('backend/cms-gallery-edit', ['data' => $data]);
});

到具有资源控制器功能的资源路由:

Route::resource('/admin/gallery', GalleryController::class);

GalleryController.php:

public function edit($id)
{
    $data = Gallery::find($id);
    // assign id to end of route
    return inertia('backend/cms-gallery-edit', ['data' => $data]);
}

编辑:

我已经尝试了@Babak 回答的两种方法,它们适用于 indexcreate 路由,但 edit 路由仍然抛出 404。这是唯一包含 id.

的路线

web.php:

Route::resource('/admin/gallery', GalleryController::class)->only('index', 'create', 'edit');

GalleryController.php:

public function edit($gallery)
{
    $data = Gallery::find($gallery);
    return inertia('backend/cms-gallery-edit', ['data' => $data]);
}

Inertia 通过 href 从前端传递 id:

<inertia-link v-if="options.edit" :href="'/admin/gallery/edit/1'">

浏览器显示:

GET http://127.0.0.1:8000/admin/gallery/edit/1 404 (Not Found)

laravel资源路由方法有固定结构,您可以查看完整列表here。对于编辑页面,它会生成类似 '/admin/gallery/{gallery}/edit'

的内容

你可以这样写:

在您的 web.php 文件中:

Route::resource('/admin/gallery', GalleryController::class)->only('edit');

并且在您的控制器中,资源的名称必须与您的函数的参数相同。

public function edit($gallery)
{
    $data = Gallery::find($gallery);
    // assign id to end of route
    return inertia('backend/cms-gallery-edit', ['data' => $data]);
}

或者,您可以使用 parameter 方法自定义它。参考here

Route::resource('/admin/gallery', GalleryController::class)->only('edit')->parameters([
    'gallery' => 'id'
]);

还有你的控制器

public function edit($id)
{
    $data = Gallery::find($id);
    // assign id to end of route
    return inertia('backend/cms-gallery-edit', ['data' => $data]);
}