批改状态:合格
老师批语:写的不错,认真!
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'=>'登录成功'));
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号