larakit / lk-boot
[Larakit] 为 Laravel 延迟注册服务提供者和别名
dev-master
2017-08-11 05:25 UTC
This package is auto-updated.
Last update: 2024-09-16 01:30:41 UTC
README
[Larakit Boot] - 延迟注册服务提供者、别名和中间件的包
在安装了需要修改配置文件的服务包后
./config/app.php
在服务提供者和别名部分,我说:“到底什么时候是个头!真烦人!”。
更不用说在开发中有很多自己的包需要注册
- 服务提供者
- 别名
- 中间件(全局的、分组的、路由的)
于是,larakit/lk-boot模块就应运而生。
延迟注册的原则是使用 composer 的 autoload 部分。
但是,不能直接记录指令,因为框架尚未初始化时连接。
{ "autoload": { "files": [ "src/init.php" ] } }
因此,任务分为两点:
-
将需要注册的数据放在某个地方,这个“某个地方”不需要初始化的框架
-
在需要的时候询问这个“某个地方”是否有需要注册的内容,然后进行初始化
1. 注册问题的解决方案
在创建模块时,在 composer.json 中指定 autoloader 文件 init.php
{ "name": ".../...", "description": "...", "license": "MIT", "require": { ... }, "autoload": { "files": [ "src/init.php" ] } }
在这个文件 "src/init.php" 中注册需要的内容
<?php /*################################################################################ регистрация сервис-провайдера ################################################################################*/ Larakit\Boot::register_provider('Larakit\Base\LarakitServiceProvider'); /*################################################################################ регистрация алиаса ################################################################################*/ Larakit\Boot::register_alias('View', 'Illuminate\Support\Facades\View'); /*################################################################################ регистрация middlewares ################################################################################*/ Boot::register_middleware(\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class); /*################################################################################ регистрация route middlewares ################################################################################*/ Boot::register_middleware_route('auth', \App\Http\Middleware\Authenticate::class); Boot::register_middleware_route('auth.basic', \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class); Boot::register_middleware_route('guest', \App\Http\Middleware\RedirectIfAuthenticated::class); Boot::register_middleware_route('throttle', \Illuminate\Routing\Middleware\ThrottleRequests::class); /*################################################################################ регистрация group middlewares ################################################################################*/ Boot::register_middleware_group('api', 'throttle:60,1'); Boot::register_middleware_group('web', [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ]);
2. 服务提供者和别名初始化问题的解决方案
2.1. 服务提供者和别名
修改文件
./config/app.php
(只需进行一次)
<?php return [ 'providers' => array_merge([ ... ], \Larakit\Boot::providers()), 'aliases' => array_merge([ ... ], \Larakit\Boot::aliases()), ];
2.2. 中间件
修改文件
./app/Http/Kernel.php
(只需进行一次)
<?php namespace App\Http; use Illuminate\Contracts\Foundation\Application; use \Larakit\TraitKernel as TraitKernel; use Illuminate\Foundation\Http\Kernel as HttpKernel; use Illuminate\Routing\Router; class Kernel extends HttpKernel { use TraitKernel; function __construct(Application $app, Router $router){ $this->__traitConstruct(); parent::__construct($app, $router); } }