Blogger Information
Blog 9
fans 0
comment 0
visits 7497
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
laravel扩展数据库类
高杰
Original
713 people have browsed it

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


Correcting teacher:WJWJ

Correction status:qualified

Teacher's comments:写的不错,认真!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post