博主信息
博文 9
粉丝 0
评论 0
访问量 9605
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
laravel扩展数据库类
高杰
原创
922人浏览过

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


批改老师:WJWJ

批改状态:合格

老师批语:写的不错,认真!
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学