Laravel:翻译资源URL

3
当在Laravel中像这样创建资源控制器时:

当在Laravel中像这样创建资源控制器时:

Route::resource('foo', 'FooController');

我们会得到类似这样的网址:
  • foo/create
  • foo/store
  • foo/{id}/edit
  • foo/{id}/update
  • ...
我希望翻译其中一些路由来得到类似这样的结果:
  • foo/nouveau
  • foo/store
  • foo/{id}/modifier
  • foo/{id}/update
这段代码是有效的:
Route::resource('foo', 'FooController', array(
    'names' => array(
        'create'    => 'nouveau',
        'edit'      => 'modifier',
        ...
    )
));

这里的问题在于edit路由:我不知道如何使其与像foo/{id}/modifier这样的{id}一起使用。
4个回答

2

本地化资源URI

Route::resource 默认使用英语动词创建资源URI。如果你需要将createedit动作的动词本地化,可以使用Route::resourceVerbs方法。这可以在AppServiceProviderboot方法中完成:

此答案基于Laravel文档:https://laravel.com/docs/5.7/controllers#restful-localizing-resource-uris

use Illuminate\Support\Facades\Route;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Route::resourceVerbs([
        'create' => 'nouveau',
        'edit' => 'modifier',
    ]);
}

一旦动词被定制,像 Route::resource('foo', 'FooController') 这样的资源路由注册将会产生以下 URI:

/foo/nouveau

/foo/{id}/modifier

其中,"nouveau" 和 "modifier" 是根据定制的动词生成的。


这是唯一一个对我有效的答案。谢谢。 - Artur Müller Romanov

2

看一下我的包: https://github.com/doitonlinemedia/TranslatableRoutes 很容易使用。

你可以这样调用资源路由:

TranslatableRoute::resource('recipe', 'recepten', 'RecipeController');

其中第二个参数是翻译后的名称,第一个定义了你的路由名称。


虽然从理论上讲这可能回答了问题,但最好还是在这里包含答案的基本部分,并提供引用链接。 - Bhargav Rao
现在它是正确的,谢谢。 - Bhargav Rao

0
据我所知,使用resource方法是不可能的。您需要手动创建这些路由,例如:trans / Lang :: get
Route::get('foo/{id}/'.trans('routes.edit'), 'FooController@edit');

你可以在第三个参数中传递的名称是针对命名路由的,与URL没有任何关系。如果您使用了一些命名路由(就像您展示的那样),现在可以使用:

URL::route('nouveau', 1);

它将生成foo/1/edit的URL。如果您没有在此处使用名称,则应该使用它们:

URL::route('foo.edit',1);

创建此URL,但这是唯一的区别,在此处没有URL影响。


-1

我认为你只是在路由上缺少命名空间。当 Laravel 生成一个资源时,它也会创建命名空间。 所以,不要使用 foo.create,而是使用 foo.nouveau

Route::resource('foo', 'FooController', array(
  'names' => array(
    'create'  => 'foo.nouveau',
    'edit'    => 'foo.modifier'
  )
));

这也可以在 Laravel 文档中 引用此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接