Laravel 5 User
将用户独立出一个模块,以提高代码可复用性。
本模块除Laravel本身外,
不依赖
其它模块。
安装
-
通过composer安装
composer require goodwong/laravel-user
-
修改config/auth.php:
App\User::class, // 修改为 Goodwong\User\Entities\User::class,
-
同样修改config/services.php:
App\User::class, // 修改为 Goodwong\User\Entities\User::class,
使用
-
查询用户
// User 继承自Eloquent $user = Goodwong\User\Entities\User::find($user_id); $users = Goodwong\User\Entities\User::get();
** 注意:** 不要使用Eloquent方式创建用户
-
通过
Goodwong\User\Handlers\UserHandler
创建用户$userHandler = app('Goodwong\User\Handlers\UserHandler'); $attributes = [ 'name' => 'User Name', 'email' => 'email', // unique, 可以使用任意字符串,只要保证唯一 'password' => 'xxxx' // raw password, optional ]; $user = $userHandler->create($attributes);
-
通过
Goodwong\User\Handlers\AuthHandler
登录用户$authHandler = app('Goodwong\User\Handlers\AuthHandler'); $authHandler->login($user); ~~$success = $authHandler->attempt($credentials);~~ // 暂未实现
** 注意:** 不要使用
Auth::login($user);
,这样得不到事件通知
事件
-
UserCreated
创建用户触发 -
UserAuthorized
用户登录系统触发
安装路由规则
安装路由规则前的特别说明
Laravel 5.4在使用第三方插件的路由规则时有问题,见 When namespaces begin with
\
they should reset. #18078
- 所以需要修改app/Providers/RouteServiceProvider.php文件,并且所有路由规则不能省略命名空间。
- 同时嵌套第三方路由规则时注意外层不要包裹命名空间,例如这样:
php // routes/web.php Route::group(['namespace' => 'App\\Http\\Controllers'], function () { William\\SomePackage\\Router::route(); }); // 这样是**不对的**,会导致最终调用的是 // App\Http\Controllers\William\SomePackage\Router::route()
具体修改:
- 修改 app/Providers/RouteServiceProvider.php
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
// 修改为
protected $namespace = '';
...
}
配置路由规则
-
修改 routes/web.php,增加:
\Goodwong\User\Router::route();
当然你也可以嵌套
prefix
、middleware
Route::group(['prefix' => '/auth'], function () { \Goodwong\User\Router::route(); });
但是不可以嵌套~~
namespace
~~,例如这样:// 这样是错误的 Route::group(['namespace' => 'App\\Http\\Controllers'], function () { \Goodwong\User\Router::route(); });
ROADMAP
-
增加更多事件
UserLogouted
-
注册用户
-
管理用户
-
支持非cookie的登录方案(用于app、微信小程序)