Когда контроллер ресурсов создается в Laravel, вот так:
Route::resource('foo', 'FooController');
Мы получаем URL-адреса, такие как:
Я хотел бы перевести некоторые из этих маршрутов, чтобы получить что-то вроде:
Этот код работает:
Route::resource('foo', 'FooController', array(
'names' => array(
'create' => 'nouveau',
'edit' => 'modifier',
...
)
));
Проблема здесь заключается в edit
маршрут: я не знаю, как сделать это работает с {id}
лайк foo/{id}/modifier
,
Оформить заказ https://github.com/doitonlinemedia/TranslatableRoutes довольно прост в использовании.
Вы можете назвать ресурсы маршрутов как:
TranslatableRoute::resource('recipe', 'recepten', 'RecipeController');
Где второй аргумент — это переведенное имя, а первый определяет имя ваших маршрутов.
Насколько я знаю, это невозможно, используя resource
метод. Вам нужно будет создать эти маршруты вручную, используя trans / Lang::get
, например:
Route::get('foo/{id}/'.trans('routes.edit'), 'FooController@edit');
Имена, которые вы можете передать здесь в 3-х параметрах, относятся к именованным маршрутам и не имеют ничего общего с URL, если вы использовали что-то с именованными маршрутами, как вы показали, теперь вы можете использовать:
URL::route('nouveau', 1);
и это будет генерировать foo/1/edit
URL-адрес. Если вы не использовали здесь имена, вы должны использовать то:
URL::route('foo.edit',1);
создать этот URL-адрес, но это единственное отличие, здесь никакого влияния URL-адреса нет.
Этот ответ основан на документации Laravel по адресу: https://laravel.com/docs/5.7/controllers#restful-localizing-resource-uris
По умолчанию, Route::resource
создаст ресурсные URI с использованием английских глаголов. Если вам нужно локализовать create
а также edit
глаголы действия, вы можете использовать Route::resourceVerbs
метод. Это может быть сделано в boot
метод вашего AppServiceProvider
:
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
Я полагаю, что вам просто не хватает пространства имен на маршрутах. Когда Laravel генерирует ресурс, он также создает пространство имен. Так что вместо foo.create
вам придется foo.nouveau
,
Route::resource('foo', 'FooController', array(
'names' => array(
'create' => 'foo.nouveau',
'edit' => 'foo.modifier'
)
));
Это также может быть ссылка здесь в документах Laravel