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

Total Downloads Latest Stable Version Latest Unstable Version License

[Larakit Boot] - 延迟注册服务提供者、别名和中间件的包

在安装了需要修改配置文件的服务包后

./config/app.php

在服务提供者和别名部分,我说:“到底什么时候是个头!真烦人!”。

更不用说在开发中有很多自己的包需要注册

  • 服务提供者
  • 别名
  • 中间件(全局的、分组的、路由的)

于是,larakit/lk-boot模块就应运而生。

延迟注册的原则是使用 composer 的 autoload 部分。

但是,不能直接记录指令,因为框架尚未初始化时连接。

{
    "autoload": {
        "files": [
	    "src/init.php"
        ]
    }
}

因此,任务分为两点:

  1. 将需要注册的数据放在某个地方,这个“某个地方”不需要初始化的框架

  2. 在需要的时候询问这个“某个地方”是否有需要注册的内容,然后进行初始化

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);
    }

}

搞定!