laravel扩展数据类有两种方法:
1、直接修改laravel的DB类,具体位置在vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php
在类文件下,写扩展的函数即可,例如扩展 lists2类,在类文件里添加如下函数即可;
public function lists2(){ $this->get()->toArray(); }
使用的时候,像使用get()即可,如:DB::table('test')->lists2();和DB::table('test')->get()->toArray();作用一样。
这种方法,修改了laravel的基类,不推荐!!!
2、使用laravel的Macroable进行扩展。
(1)在app\Providers文件夹下,建立需要扩展的类文件:DBServiceProvider.php,内容如:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class DBServiceProvider extends ServiceProvider { public function boot(){ QueryBuider::macro('lists',function(){ echo 'php.cn'; }); } } ?>
在app\Http\Controller\admins\Admin.php的函数index进行调取
public function index(){ $data['admins'] = DB::table('admin')->lists(); exit($data['admins']); }
打开网址:
http://adm.test.cn/admins/admin/index
报错,原因是没有注册扩展类,注册扩展类的方法是在config\app.php的下边172-176行,在下边模仿上边的语句进行注册
App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\DBServiceProvider::class,
刷新网址,结果如下:
php.cn
证明DB类已扩展成功,然后修改DBServiceProvider.php,将读取的数据库内容全部转为数组形式输出
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Database\Query\Builder as QueryBuider; class DbServiceProvider extends ServiceProvider { public function boot(){ QueryBuider::macro('lists',function(){ $data = $this->get()->toArray(); $result = []; foreach ($data as $val) { $result[] = (array)$val; } return $result; }); } } ?>
修改app\Http\Controller\admins\Admin.php的函数index
public function index(){ $data['admins'] = DB::table('admin')->lists(); foreach ($data['admins'] as $key => $val) { $group = DB::table('admin_group')->where('gid',$val['gid'])->first(); $data['admins'][$key]['group_title'] = $group->title; $data['admins'][$key]['lastlogin'] = $val['lastlogin']>0?date('Y-m-d H:i:s',$val['lastlogin']):'--'; } return view('admins.admin.index',$data); }
对应的摸板为resources\views\admins\admin\index.blade.php,内容如下
<!DOCTYPE html> <html> <head> <title>账户管理</title> <link rel="stylesheet" href="/statics/plugin/layui/css/layui.css"> <script src="/statics/plugin/layui/layui.js"></script> </head> <body> <table class="layui-table" style="padding:10px 0;"> <tr> <th>ID</th> <th>用户名</th> <th>分组</th> <th>真实姓名</th> <th>最后登录时间</th> <th>状态</th> <th>操作</th> </tr> @foreach($admins as $admin) <tr> <td>{{$admin['id']}}</td> <td>{{$admin['username']}}</td> <td>{{$admin['group_title']}}</td> <td>{{$admin['real_name']}}</td> <td>{{$admin['lastlogin']}}</td> <td>@if($admin['status'] == 1) 禁止 @else 正常 @endif</td> <td> <button class="layui-btn layui-btn-sm">修改</button> <button class="layui-btn layui-btn-disabled layui-btn-sm">删除</button> </td> </tr> @endforeach </table> </body> </html>
打开网址:
http://adm.test.cn/admins/admin/index
结果如下:
3、后台用户的验证,需要用到中间件,在路由中对后台首页添加对应的中间件:
Route::get('/admins/home/index','admins\Home@index')->middleware('auth');
浏览器打开报错,提示没有找到名称为login的路由,对后台登录的路由进行命名
Route::get('/admins/account/login','admins\Account@login')->name('login');
刷新网址,直接跳转到后台登录页,登录成功后,还是直接跳转到登录页,没有进入到后台首页,session没有存储,修改登录的语句,将exit改为return,可正常登录
return json_encode(array('code'=>2,'msg'=>'登录成功'));