博客列表 >laravel扩展数据库类

laravel扩展数据库类

高杰
高杰原创
2020年06月19日 15:41:21719浏览

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

结果如下:

1592552315992224.png

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'=>'登录成功'));


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议