Laravel重命名路由资源路径名
Laravel rename routing resource path names
我们可以在 Laravel 中重命名路由资源路径名称,就像在 Ruby on Rails 中一样吗?
当前
/users/create -> UsersController@create
/users/3/edit -> UsersController@edit
..
我想要这样;
/users/yeni -> UsersController@create
/users/3/duzenle -> UsersController@edit
我想做本地化。
示例来自 Ruby on Rails;
scope(path_names: { new: "ekle" }) do
resources :users
end
这在 Laravel 中是不可能的,因为他们使用代码的约定优于配置。 A 资源使用 RESTfull 实现
所以你必须遵守
的惯例
GET /news/create
POST /news
GET /news/1
GET /news/1/edit
...
它并不漂亮,但您可以定义多个使用相同控制器功能的路由。例如:
Route::get("user/create", "UsersController@create");
Route::get("user/yeni", "UsersController@create");
唯一(明显的缺点)是你的路线很快就会变得非常混乱。 app/config/app.php
中有一个设置,您可以在其中 set/change 您的语言环境,并且可以将其与过滤器结合使用以使用路由,然后根据当前 [=19] 对这些路由进行分组=],但这需要更多的研究。
据我所知,没有办法即时重命名资源路线,但如果你有创意,你可以想出办法。祝你好运!
您无法更改 url 的资源。
为此,您需要 define/create 根据您的需要选择每条路线
Route::get("user/yeni", "UsersController@create");
如果您需要不止一种语言,您可以使用 trans
辅助函数,它是 Lang::get
方法的别名
Route::get('user/'.trans('routes.create'), 'UsersController@create');
我刚遇到同样的问题。并设法重新创建某种自定义资源路由方法。它可能会好很多,但现在它就像一个魅力。
namespace App\Helpers;
use Illuminate\Support\Facades\App;
class RouteHelper
{
public static function NamedResourceRoute($route, $controller, $named, $except = array())
{
$routes = RouteHelper::GetDefaultResourceRoutes($route);
foreach($routes as $method => $options) {
RouteHelper::GetRoute($route, $controller, $method, $options['type'], $options['name'], $named);
}
}
public static function GetRoute($route, $controller, $method, $type, $name, $named) {
App::make('router')->$type($named.'/'.$name, ['as' => $route.'.'.$method, 'uses' => $controller.'@'.$method]);
}
public static function GetDefaultResourceRoutes($route) {
return [
'store' => [
'type' => 'post',
'name' => ''
],
'index' => [
'type' => 'get',
'name' => ''
],
'create' => [
'type' => 'get',
'name' => trans('routes.create')
],
'update' => [
'type' => 'put',
'name' => '{'.$route.'}'
],
'show' => [
'type' => 'get',
'name' => '{'.$route.'}'
],
'destroy' => [
'type' => 'delete',
'name' => '{'.$route.'}'
],
'edit' => [
'type' => 'get',
'name' => '{'.$route.'}/'.trans('routes.edit')
]
];
}
}
在routes.php中这样使用:
\App\Helpers\RouteHelper::NamedResourceRoute('recipes', 'RecipeController', 'recepten');
第一个参数用于命名路由,第二个参数是控制器,第三个是路由本身。
view/lang/{language}/route.php 文件中的类似内容:
'edit' => 'wijzig',
'create' => 'nieuw'
结果如下:
我知道这是一个老问题。我只是出于历史目的发布此答案:
Laravel 现在可以本地化资源。 https://laravel.com/docs/5.5/controllers#restful-localizing-resource-uris
Localizing Resource URIs By default, Route::resource will create
resource URIs using English verbs. If you need to localize the create
and edit action verbs, you may use the Route::resourceVerbs method.
This may be done in the boot method of your AppServiceProvider:
use Illuminate\Support\Facades\Route;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot() {
Route::resourceVerbs([
'create' => 'crear',
'edit' => 'editar',
]); }
Once the verbs have been customized, a resource route registration such as Route::resource('fotos', 'PhotoController') will
produce the following URIs:
/fotos/crear
/fotos/{foto}/editar
我们可以在 Laravel 中重命名路由资源路径名称,就像在 Ruby on Rails 中一样吗?
当前
/users/create -> UsersController@create
/users/3/edit -> UsersController@edit
.. 我想要这样;
/users/yeni -> UsersController@create
/users/3/duzenle -> UsersController@edit
我想做本地化。
示例来自 Ruby on Rails;
scope(path_names: { new: "ekle" }) do
resources :users
end
这在 Laravel 中是不可能的,因为他们使用代码的约定优于配置。 A 资源使用 RESTfull 实现
所以你必须遵守
的惯例GET /news/create
POST /news
GET /news/1
GET /news/1/edit
...
它并不漂亮,但您可以定义多个使用相同控制器功能的路由。例如:
Route::get("user/create", "UsersController@create");
Route::get("user/yeni", "UsersController@create");
唯一(明显的缺点)是你的路线很快就会变得非常混乱。 app/config/app.php
中有一个设置,您可以在其中 set/change 您的语言环境,并且可以将其与过滤器结合使用以使用路由,然后根据当前 [=19] 对这些路由进行分组=],但这需要更多的研究。
据我所知,没有办法即时重命名资源路线,但如果你有创意,你可以想出办法。祝你好运!
您无法更改 url 的资源。
为此,您需要 define/create 根据您的需要选择每条路线
Route::get("user/yeni", "UsersController@create");
如果您需要不止一种语言,您可以使用 trans
辅助函数,它是 Lang::get
方法的别名
Route::get('user/'.trans('routes.create'), 'UsersController@create');
我刚遇到同样的问题。并设法重新创建某种自定义资源路由方法。它可能会好很多,但现在它就像一个魅力。
namespace App\Helpers;
use Illuminate\Support\Facades\App;
class RouteHelper
{
public static function NamedResourceRoute($route, $controller, $named, $except = array())
{
$routes = RouteHelper::GetDefaultResourceRoutes($route);
foreach($routes as $method => $options) {
RouteHelper::GetRoute($route, $controller, $method, $options['type'], $options['name'], $named);
}
}
public static function GetRoute($route, $controller, $method, $type, $name, $named) {
App::make('router')->$type($named.'/'.$name, ['as' => $route.'.'.$method, 'uses' => $controller.'@'.$method]);
}
public static function GetDefaultResourceRoutes($route) {
return [
'store' => [
'type' => 'post',
'name' => ''
],
'index' => [
'type' => 'get',
'name' => ''
],
'create' => [
'type' => 'get',
'name' => trans('routes.create')
],
'update' => [
'type' => 'put',
'name' => '{'.$route.'}'
],
'show' => [
'type' => 'get',
'name' => '{'.$route.'}'
],
'destroy' => [
'type' => 'delete',
'name' => '{'.$route.'}'
],
'edit' => [
'type' => 'get',
'name' => '{'.$route.'}/'.trans('routes.edit')
]
];
}
}
在routes.php中这样使用:
\App\Helpers\RouteHelper::NamedResourceRoute('recipes', 'RecipeController', 'recepten');
第一个参数用于命名路由,第二个参数是控制器,第三个是路由本身。
view/lang/{language}/route.php 文件中的类似内容:
'edit' => 'wijzig',
'create' => 'nieuw'
结果如下:
我知道这是一个老问题。我只是出于历史目的发布此答案:
Laravel 现在可以本地化资源。 https://laravel.com/docs/5.5/controllers#restful-localizing-resource-uris
Localizing Resource URIs By default, Route::resource will create resource URIs using English verbs. If you need to localize the create and edit action verbs, you may use the Route::resourceVerbs method. This may be done in the boot method of your AppServiceProvider:
use Illuminate\Support\Facades\Route; /** * Bootstrap any application services. * * @return void */ public function boot() { Route::resourceVerbs([ 'create' => 'crear', 'edit' => 'editar', ]); }
Once the verbs have been customized, a resource route registration such as Route::resource('fotos', 'PhotoController') will produce the following URIs:
/fotos/crear /fotos/{foto}/editar