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