Laravel5.8 - 001.组件介入框架

github

https://github.com/masterzcw/laravel58

微信授权登录

安装laravel-wechat

https://github.com/overtrue/laravel-wechat

$ composer require "overtrue/laravel-wechat:~5.0"

** 在 app/Http/Kernel.php 中添加路由中间件:

protected $routeMiddleware = [
    // ...
    'wechat.oauth' => \Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate::class,
];

在路由(/routes/web.php)中添加中间件:

Route::group(['middleware' => ['web', 'wechat.oauth']], function () {
    Route::get('/user', function () {
        $user = session('wechat.oauth_user.default'); // 拿到授权用户资料
        dd($user);
    });
});

配置文件

$ php artisan vendor:publish --provider=“Overtrue\LaravelWeChat\ServiceProvider”
在配置文件(/.env)中增加

# wechat
WECHAT_OFFICIAL_ACCOUNT_APPID=wx229a24acb26e4a32
WECHAT_OFFICIAL_ACCOUNT_SECRET=bffddeb2917ffe7a5d86e0de9c722f7e
WECHAT_OFFICIAL_ACCOUNT_TOKEN=masterzcw

此时可以测试路由

Route::group(['middleware' => ['web', 'wechat.oauth']], function () {
    Route::get('/user', function () {
        $user = session('wechat.oauth_user.default'); // 拿到授权用户资料
        dd($user);
    });
});

组件与框架的融合 & 良好的迁移性

注册服务到组件(/laravel-shop/composer.json)

    "extra": {
        "laravel": {
            "providers": [
                "Masterzcw\\LaravelShop\\Wap\\Member\\Providers\\MemberServiceProvider"
            ]
        }
    }

创建用户授权控制器

/laravel-shop/src/Wap/Member/Http/Controller/AuthorizationsController.php

创建用户的服务提供者

/laravel-shop/src/Wap/Member/Providers/MemberServiceProvider.php

创建组件的user模型

/laravel-shop/src/Wap/Member/Models/User.php

创建中间件, 用来取代微信用户授权的中间件

/laravel-shop/src/Wap/Member/Http/Middleware/ReplaceWXAuth.php

组件的迁移性优化

** 首先要添加组件的依赖
/vendor/masterzcw/laravel-shop/src/Wap/Member/composer.json

    "require": {
        "overtrue/laravel-wechat": "~5.0"
    },

注册依赖的中间件

在组件中注册依赖的中间件, 就不必在组件安装后在框架中另外的注册这些中间件

/vendor/masterzcw/laravel-shop/src/Wap/Member/Providers/MemberServiceProvider.php
$this->registerRouteMiddleware();
其中/vendor/laravel/framework/src/Illuminate/Foundation/Application.php
是$this->app的类

把组件的配置文件加载到框架的配置中

组件的服务提供者中(/vendor/masterzcw/laravel-shop/src/Wap/Member/Providers/MemberServiceProvider.php)
$this->mergeConfigFrom(配置文件路径, 别名);

public function register(){
    $this->mergeConfigFrom(__DIR__.'/../Config/Member.php', "wap.member");
}

之后控制器中可以测试

config('wap.member')

用组件的配置文件的内容替换框架配置的原有内容

用组件的配置信息替换框架的配置信息, 例如替换了auth的类

use Illuminate\Support\Arr;
class MemberServiceProvider extends ServiceProvider
{
    ...
    public function boot()
    {
        // 怎么根据配置文件去加载auth信息
        $this->loadMemberAuthConfig();
    }
    private function loadMemberAuthConfig(){
        $_config = config('wap.member.auth', []);
        config(Arr::dot($_config, 'auth.'));
    }
    ...
}

命令行发布配置文件

$ php artisan vendor:publish --provider=“Masterzcw\LaravelShop\Wap\Member\Providers\MemberServiceProvider”

服务提供者中(/laravel-shop/src/Wap/Member/Providers/MemberServiceProvider.php)

private function registerPublishing(){
    // 判断是否在命令行运行
    if($this->app->runningInConsole()){
        // $this->publishes([当前组件的配置文件路径 => config_path(复制到哪个目录)], '标识');
        $this->publishes([__DIR__.'/../Config' => config_path()], 'wap.member');
    }
}

组件的数据迁移

生成迁移

使用 Artisan 命令 make:migration 来创建迁移。
php artisan make:migration 文件名后缀(转大驼峰作为类名) --create=表名称
php artisan make:migration create_sys_user_table --create=sys_user

执行迁移文件

php artisan migrate

注意migrations表中的数据与各个表是一一对应的, 要保持一致

组件的数据迁移

服务提供者(/laravel-shop/src/Wap/Member/Providers/MemberServiceProvider.php)

    protected function loadMigrations(){
        // 判断是否在命令行运行
        if($this->app->runningInConsole()){
            $this->loadMigrationsFrom(__DIR__."/../Database/migrations");
        }
    }

创建laravel组件命令行

自定义命令

$ php artisan make:command InstallConmmand

组件中创建命令

(/laravel-shop/src/Wap/Member/Console/Commands/InstallConmmand.php)

服务提供者中

(/laravel-shop/src/Wap/Member/Providers/MemberServiceProvider.php)

public function boot()
{
	....
    $this->commands([
    	\Masterzcw\LaravelShop\Wap\Member\Console\Commands\InstallConmmand::class,
	]);
}

命令行测试

$ php artisan wap-member:install argument1

希望通过命令行执行安装

/laravel-shop/src/Wap/Member/Console/Commands/InstallConmmand.php

    public function handle()
    {
    	//数据迁移
        $this->call("migrate");
        $this->call("seed:db");

        // config发布文件发布
        $this->call("vendor:publish", [
            "--provider" => "Masterzcw\LaravelShop\Wap\Member\Providers\MemberServiceProvider",
        ]);
    }

命令行测试
$ php artisan wap-member:install

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值