在Laravel中创建资源控制器时,如下所示:
Route::resource('foo', 'FooController');
我们获得以下网址:
我想翻译其中的一些路线,以获得类似的内容:
此代码正常运行:
Route::resource('foo', 'FooController', array(
'names' => array(
'create' => 'nouveau',
'edit' => 'modifier',
...
)
));
此处的问题是edit
路线:我不知道如何使其与{id}
foo/{id}/modifier
一起使用。
答案 0 :(得分:1)
查看我的包裹:https://github.com/doitonlinemedia/TranslatableRoutes非常易于使用。
您可以调用以下资源路径:
TranslatableRoute::resource('recipe', 'recepten', 'RecipeController');
第二个参数是翻译名称,第一个参数定义路线名称。
答案 1 :(得分:0)
据我所知,使用resource
方法无法实现。您需要使用trans / Lang::get
手动创建这些路径,例如:
Route::get('foo/{id}/'.trans('routes.edit'), 'FooController@edit');
您可以在第3个参数中传递的名称是针对命名路线的,并且与网址没有任何共同之处,如果您使用的是指定的路线,如您所示,您现在可以使用:
URL::route('nouveau', 1);
它会生成foo/1/edit
个网址。如果你没有使用这里的名字,你应该使用:
URL::route('foo.edit',1);
创建此网址,但这是唯一的区别,此处没有网址影响。
答案 2 :(得分:0)
此答案基于Laravel文档,网址为https://laravel.com/docs/5.7/controllers#restful-localizing-resource-uris
默认情况下,Route::resource
将使用英语动词创建资源URI。如果您需要对create
和edit
动作动词进行本地化,则可以使用Route::resourceVerbs
方法。这可以通过您的boot
的{{1}}方法来完成:
AppServiceProvider
自定义动词后,诸如Route :: resource('foo','FooController')之类的资源路由注册将产生以下URI:
use Illuminate\Support\Facades\Route;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Route::resourceVerbs([
'create' => 'nouveau',
'edit' => 'modifier',
]);
}
/foo/nouveau
答案 3 :(得分:-1)
我相信你只是错过了路线上的命名空间。当Laravel生成资源时,它也会创建命名空间。因此,foo.create
代替foo.nouveau
,而不是Route::resource('foo', 'FooController', array(
'names' => array(
'create' => 'foo.nouveau',
'edit' => 'foo.modifier'
)
));
。
{{1}}
这在Laravel文档中也可以是referenced here