本文基于后盾laravel–module组件化开发所作。
通过使用模块来管理大型Laravel项目,模块就像一个laravel包非常方便的进行添加或移除。
这个包已经在 HDCMS 中使用。
模块是在nwidart.com/laravel-modules 和 laravel-permission 组件基础上扩展了一些功能,所以需要先安装这两个组件。
laravel-modules 和 laravel-permission 组件的功能都可以正常使用
composer require houdunwang/laravel-module
php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"
{
"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "Modules/"
}
}
}
4.创建模块
php artisan hd:module Admin
创建模块会同时执行以下操作:
- 生成 menus.php 配置文件
- 生成 permission.php 权限文件
5.文件说明
- config——基础配置,用于配置模块中文描述等信息
- permission.php——权限设置
- menus.php——后台管理菜单
6.后盾laravel-module手册 查看具体用法
用户认证脚手架
Laravel 自带了用户认证功能,我们将利用此功能来快速构建我们的用户中心。
首先执行认证脚手架命令,生成代码:
php artisan make:auth
添加guard
打开config\auth.php,这里用的模块化,后台新建admins表
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
];
LoginController里面重写方法
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/admin';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest:admin')->except('logout');
}
/**
*
* 重写加载后台登录模板方法
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function showLoginForm()
{
return view('admin::auth.login');
}
public function username(){
return 'name';
}
protected function guard()
{
return \Auth::guard('admin');
}
/**
*
* 重写后台退出登录操作
*
* @param Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return redirect('/admin/login');
}
}
实现登陆后跳转到不同路径
app\Middleware\RedirectIfAuthenticated.php
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
$path = $guard ? '/admin' : '/home';
return redirect($path);
}
return $next($request);
}
实现未通过认证跳转不同登陆页
app\Exceptions\Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
{
//获取当前守卫的值
$guards = $exception->guards();
//通过判断$guards的值里面是否有admin的值,如果有,代表想跳转去后台登录,如果没有,就代表跳转去前台登录
if (in_array('admin',$guards)){
$url = '/admin/login';
}else{
$url = '/login';
}
if ($request->expectsJson()){
//如果是异步请求,进这个if
return response()->json(['message' => $exception->getMessage()], 401);
}else{
//如果不是异步请求,就进入else
return redirect()->guest($url);
}
}
这里注意的是重写完后要在路由组中传看守器
Route::group(['middleware' => ['web','auth:admin'], 'prefix' => 'admin', 'namespace' => 'Addons\Admin\Http\Controllers'], function()
{
Route::get('/', 'AdminController@index');
});