Laravel: перевод ресурсов URL

Когда контроллер ресурсов создается в Laravel, вот так:

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

Мы получаем URL-адреса, такие как:

  • Foo / создать
  • Foo / магазин
  • Foo / {ID} / редактировать
  • Foo / {ID} / обновление

Я хотел бы перевести некоторые из этих маршрутов, чтобы получить что-то вроде:

  • Foo /нуво
  • Foo / магазин
  • Foo / {ID} /модификатор
  • Foo / {ID} / обновление

Этот код работает:

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

Проблема здесь заключается в edit маршрут: я не знаю, как сделать это работает с {id} лайк foo/{id}/modifier,

2

Решение

Оформить заказ https://github.com/doitonlinemedia/TranslatableRoutes довольно прост в использовании.

Вы можете назвать ресурсы маршрутов как:

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

Где второй аргумент — это переведенное имя, а первый определяет имя ваших маршрутов.

1

Другие решения

Насколько я знаю, это невозможно, используя 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-адреса нет.

0

Этот ответ основан на документации 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

0

Я полагаю, что вам просто не хватает пространства имен на маршрутах. Когда Laravel генерирует ресурс, он также создает пространство имен. Так что вместо foo.create вам придется foo.nouveau,

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

Это также может быть ссылка здесь в документах Laravel

-1