jalameta / jps-router
Requires
- illuminate/console: >=5.6
- illuminate/filesystem: >=5.6
- illuminate/routing: >=5.6
- illuminate/support: >=5.6
README
PT. Jalameta Pilar Sinergis的Laravel自定义路由包装器。
安装
使用composer
composer require jalameta/jps-router
应用到您的项目中
Laravel >= 5.8
- 自动加载 :)
Laravel <= 5.8
- 将
\Jalameta\Router\RouterServiceProvider添加到config/app.php中的providers数组
在您的项目中运行命令
php artisan jps:routes --install
如果您决定移除原始的Laravel路由,可以在命令中添加 --remove 选项。因此,命令将是:
php artisan jps:routes --install --remove
JPS Router将为您配置路由,Laravel默认的
routes文件夹将被删除。因此,请先备份您的定义路由。
使用方法
创建新路由
要创建新路由,只需运行: php artisan make:route DefaultRoute 运行上述命令后,名为 DefaultRoute 的路由将出现在 app/Http/Routes/DefaultRoute.php 中。创建路由后,它不会自动加载,您必须在路由配置中注册路由类。
make:route选项
-
注入:注入是有用的选项,可以在路由配置中自动添加路由类名,因此您无需手动添加。例如:
php artisan make:route DefaultRoute --inject web上述命令将在config/routes.php中定义的web组中创建默认路由。 -
控制器:控制器选项将生成路由及其使用的控制器。因此,您不需要运行2个artisan命令来创建新的控制器和路由。
php artisan make:route DefaultRoute --controller HomeController -
帮助:显示JPS路由命令的帮助信息。
路由配置
以下是JPS路由配置的示例。
return [ 'groups' => [ 'web' => [ 'middleware' => 'web', 'prefix' => '', ], 'api' => [ 'middleware' => 'api', 'prefix' => 'api', ], ], 'web' => [ /** @inject web **/ \App\Http\Routes\DefaultRoute::class, ], 'api' => [ /** @inject api **/ ], ];
如您所见,groups索引是组配置,您可以在其中传递任何Laravel选项,例如as、domain、middleware、prefix等。之后,web和api是在groups索引中定义的组索引。它是一个路由类名的数组。
类结构
创建路由后,我们将看到生成的文件示例。
<?php namespace App\Http\Routes; use Jalameta\Router\BaseRoute; class DefaultRoute extends BaseRoute { /** * Register routes handled by this class. * * @return void */ public function register() { // Make an awesome route } }
创建路由后,我们将看到生成的文件示例。我们可以在register方法中定义路由。您所需的所有内容只是调用 $this->router 作为路由实例。然后,我们可以调用Laravel路由方法,如post、put等。请参阅Laravel路由文档。
<?php namespace App\Http\Routes; use Jalameta\Router\BaseRoute; class DefaultRoute extends BaseRoute { /** * Register routes handled by this class. * * @return void */ public function register() { $this->router->get('/', function () { return view('welcome'); }); } }
使用控制器
从创建路由的命令中,我们知道我们可以传递控制器命名空间。创建的控制器将显示在路由类中作为控制器方法。
<?php namespace App\Http\Routes; use Jalameta\Router\BaseRoute; use App\Http\Controllers\HomeController; class DefaultRoute extends BaseRoute { /** * Register routes handled by this class. * * @return void */ public function register() { $this->router->get('/', [ 'uses' => $this->uses('index') ]); } /** * Controller used by this route. * * @return string */ public function controller() { return HomeController::class; } }
上述路由等于
Route::get('/', [ 'uses' => "App\Http\Controllers\HomeController@index" ]);
这个包旨在解决定义路由时多次出现的命名空间和类名重复问题。或者,如果您不想在路由类中使用控制器,可以将要使用的控制器类名作为$this->uses()方法的第二个参数传递,例如:$this->uses('login', LoginController::class)。
路由前缀
覆盖在类属性中定义的路由前缀。默认前缀是 '/';
protected $prefix = '/home';
$this->router->get($this->prefix(), [ 'uses' => $this->uses('index') ]);
上述路由等于
Route::get('/home', [ 'uses' => "App\Http\Controllers\HomeController@index" ]);
路由名称
您需要在路由类中定义路由名称属性
protected $name = 'home';
稍后我们可以使用$this->name()方法来在路由组名称和单个路由名称之间添加点(.)分隔符
$this->router->get('/', [ 'as' => $this->name('landing') 'uses' => $this->uses('index') ]);
它等同于
Route::get('/', [ 'as' => 'home.landing' 'uses' => "App\Http\Controllers\HomeController@index" ]);