扩展DB类方法
Laravel 允许对具有macroable关键词的类进行功能扩展。
Larvel提供的get()、first()方法,获得的数据都不是纯数组。通过对DB类进行功能扩展,扩展lists()、item()方法,获得的数据都是纯数组,便于统一操作。
第一步,在app/providers下创建DBServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Query\Builder as QueryBuilder;
class DBServiceProvider extends ServiceProvider
{
public function boot(){
//扩展lists方法,将数据转为纯数组
QueryBuilder::macro('lists',function(){
$data = $this->get()->all();
$results=[];
foreach($data as $val){
$results[]=(array)$val;
}
return $results;
});
//扩展item方法,将对象转为数组
QueryBuilder::macro('item',function(){
$data = $this->get()->first();
$results=(array)$data;
return $results;
});
}
}
第二步 在config/app.php中注册DBServiceProvider
//扩展DB功能
App\Providers\DBServiceProvider::class,
`
在控制器中使用扩展的lists()、item()方法
<?php
namespace App\Http\Controllers\admins;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
// 管理员管理
class Admin extends Controller
{
public function index(){
$data['admins']=DB::table('admin')->lists();
foreach ($data['admins'] as $key=>$val){
$group=DB::table('admin_group')->where('gid',$val['gid'])->item();
$data['admins'][$key]['group_title']=$group['title'];
}
return view('admins/admin/index',$data);
}
}
总结:
1、合理扩展laravel方法,使之更适合自己的操作习惯。
2、Laravel 采用MVC模式,MVC三者各司其职。在编程时应记清当前所处的环境位置,完成相应的功能。
3、路由非常重要,控制器下的各方法都要有路由。
4、安全中的菜单表文件和动态生成菜单等,设计得非常巧妙,需要好好消化理解。