命名路由不同于控制器/数据库

时间:2019-04-16 14:03:52

标签: php laravel eloquent

在Laravel 5.8应用程序中,我希望我的URL用荷兰语表示,但是,为了保持一致并且更容易使用,我希望使用其英文名称来命名其他所有内容。雄辩的意志(据我所知)只有在我的模型,控制器,表等都命名相同的情况下才能通过适当的变量。

现在,我有一个名为/ backend / facturen的路由,在英语中为/ backend / invoices。我尝试使用名称路由,但是,我发现这不是我想要的。

我的路线:

Route::resource('/backend/facturen', 'InvoicesController');

我在InvoicesController中的show方法:

public function show(Invoice $invoice) {
    return view('backend.invoice.show', compact('invoice'));
}

数据库表名为“发票”。

到目前为止,我唯一可行的方法是将路线重命名为:

Route::resource('/backend/invoices', 'InvoicesController');

但是,当然,这不能解决我的问题。

我希望看到发票上的所有数据都显示在(荷兰)/ facturen路线上。

3 个答案:

答案 0 :(得分:3)

默认情况下,资源控制器会寻找一个与URL的最后一个名称相同的变量,因此重命名URL也会更改该变量。

但是您可以tell Laravel to use a different name

Route::resource('/backend/facturen', 'InvoicesController')->parameters([
    'facturen' => 'invoice'
]);

答案 1 :(得分:1)

您还可以从id中获取变量本身,而无需使用laravel魔术来从URL中正确检测变量:

public function show($id) {
    $invoice = Invoice::findOrFail($id);

    return view('backend.invoice.show', compact('invoice'));
}

答案 2 :(得分:0)

否,您已经注册了指向URL /backend/facturen的路由,并使用name函数对其进行命名:

Route::resource('/backend/facturen', 'InvoicesController')->name('backend.invoice.show');

即使那样,它也不会显示该路由,使用view函数时,您需要将路径传递到模板,而不是路由。