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