mertyildiran / laravel-advanced-route
Laravel的高级路由类 - 将隐式控制器恢复到框架中。
Requires
- laravel/framework: 5.*
README
Laravel 5.3, 5.4, 5.5 和 5.6 的高级路由,支持控制器。
背景
在 Laravel 5.3 中,高级功能 Route::controller 被移除。这个类解决了这个不足。
原因
默认路由器对于小型项目来说是足够的。一旦项目开始增长,将所有可能的路由定义放置在路由文件中开始变得难以理解和跟踪。经常路由文件变得非常混乱,以至于开发者害怕修改/删除路由(即使这些可能没有使用过),以免意外破坏应用程序。
AdvancedRoute::controller 将控制权交给控制器本身,使每个控制器对自己的路由(目的地)负责。
使用 get/post/any 前缀指定控制器方法可以提高可读性,并允许通过查看方法来轻松理解使用什么 HTTP 方法调用功能。
你的路由文件是否无法适应屏幕,你必须滚动才能看到所有路由?你是否将路由分割到单独的路由文件中,并在一个路由文件中包含这些文件?你是否不习惯删除路由,因为这些可能在某处被使用?你使用名称来“命名”你的路由吗?那么是时候跳出思维定式,选择高级路由了。
工作原理
高级路由允许你轻松地定义一个路由来处理控制器类中的每个操作。首先,使用 AdvancedRoute::controller 方法定义路由。控制器方法接受两个参数。第一个是控制器处理的基准 URI,第二个是控制器类的名称。接下来,只需向你的控制器中添加方法。方法名称应从响应它们的 HTTP 动词开始,后跟 URI 的标题化版本。
<?php namespace App\Http\Controllers; class UserController extends Controller { /** * Responds to any (GET,POST, etc) request to /users */ public function anyIndex() { // } /** * Responds to requests to GET /users/show/1 */ public function getShow($id) { // } /** * Responds to requests to GET /users/admin-profile */ public function getAdminProfile() { // } /** * Responds to requests to POST /users/profile */ public function postProfile() { // } }
安装
a) 通过 composer(推荐)
composer require lesichkovm/laravel-advanced-route
b) 手动
将以下内容添加到你的 composer 文件中
"repositories": [ { "type": "vcs", "url": "https://github.com/lesichkovm/laravel-advanced-route.git" } ], "require": { "lesichkovm/laravel-advanced-route": "dev-master" },
使用
将以下行添加到你想映射控制器的地方
AdvancedRoute::controller('/{YOUR PATH}', '{YOUR CONTROLLER FULL NAME}');
完整示例
Route::group(['prefix' => '/', 'middleware' => []], function () { AdvancedRoute::controller('/auth', 'AuthController'); AdvancedRoute::controller('/cms', 'CmsController'); AdvancedRoute::controller('/shop', 'ShopController'); Route::any('/', 'WebsiteController@anyIndex'); });
多个控制器映射
AdvancedRoute::controllers([ '/auth' => 'AuthController', '/cms' => 'CmsController', '/shop' => 'ShopController', ]);
缺少方法
如果你有一个具有几个预定义路由的控制器,你可以添加 missingMethod() 来处理该控制器路径的所有未定义子路径。
class WikiController extends Controller { public function getIndex() { /* show main page or list of content */ } public function getCreate() { /* a page to add a new wiki-page */ } public function postCreate() { /* add a new wiki-page */ } public function missingMethod() { /* do anything elselook up the path in the wiki-database */ } }
致谢
Laravel Advanced Route 的实现离不开所有优秀的 贡献者!
替代方案
如果你觉得 Laravel 太臃肿且运行缓慢,告诉我吧?你想要走纯 PHP 路线?那么这里有一些值得注意的包,允许你保留 Laravel 路由的优雅之处