laravel笔记5 无线分类1
错误提示
Class 'App\Http\Controllers\Admin\Category' not found
解决
namespace App\Http\Controllers\Admin;
use App\Category;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
创建相应控制器category的时候没有引入模型,所以在控制器文件最上面要引入控制器use App\Category;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
错误提示
ErrorException (E_ERROR)
Route [admin.category.edit] not defined. (View: E:\phpStudy_64\phpstudy_pro\WWW\yfkt.com\resources\views\admin\category\index.blade.php)
解决
创建edit路由
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
分类模块如果没有使用resource创建路由 最后使用match方式来添加指定数据提交方式 然后在控制器里面这样写
public function create(Request $request){
//判断提交的方式是哪个 然后在保存到数据库
if($request->isMethod('post')){
// dd($request->post());
$category = new Category();
$category->name = $request->name;
$category->sort = $request->sort;
$result = $category->save();
//上述结果如果添加成功返回的是布尔值
checkreturn($result,'添加');
return redirect(route('admin.category.list'));
}
return view('admin.category.create');
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
实现无限极分类功能(以城市为例)
首先要在模型里面获取数据 打开模型文件app下的Category.php
class Category extends Model
{
//获取分类列表
static public function getcates(){
$cates = self::get();
return$cates;
返回数据以后,打开控制器app\Http\Controllers\Admin\CategoryController.php把数据with到视图模板里面
//添加分类
public function create(Request $request){
if($request->isMethod('post')){
// dd($request->post());
$category = new Category();
$category->name = $request->name;
$category->sort = $request->sort;
$category->pid = $request->pid;
$result = $category->save();
//上述结果如果添加成功返回的是布尔值
checkreturn($result,'添加');
return redirect(route('admin.category.list'));
}
$cates = Category::getcates();
return view('admin.category.create')->with('cates',$cates);
}
}
最后到视图模板里面在相应的循环地方进行循环
<div class="form-group">
<label for="pid">上级分类</label>
<select class="form-control" name = 'pid' id="pid">
<option value="0">顶级分类</option>
@foreach ($cates as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
###################################################################################
实现无限分类层级关系显示(补充)
首先到Category.php模型文件把获取的数据进行重组
class Category extends Model
{
//获取分类列表
static public function getcates(){
$cates = self::OrderBy('sort','Desc')->OrderBy('id','Desc')->get();
//$cates可以获取传入所有参数
$cates = self::makecates($cates);
return$cates;
}
//重新组织数据
static function makecates($data,$pid=0,$level=0){
$arr = [];
foreach ($data as $item){
if($item->pid == $pid){
$item->level = $level;
$arr[] = $item; //如果pid相等,那么同一分类层级的数据放在arr数组里
//循环完同一层级的数据,然后用递归的方式找到低层级的数据
//$item->id就是相对应的item下的pid
//找到相应item下的数据保存到临时的arr_tmp
$arr_tmp = self::makecates($data,$item->id,$level+1);
//把两个数据进行合并 最后返回$arr
$arr = array_merge($arr,$arr_tmp);
}
}
return $arr;
}
}
然后去控制器文件CategoryController里面修改获取数据的参数
public function index(){
//使用模型方式获取数据然后with到view模板
// $list = Category::Orderby('sort','Desc')->Orderby('id','Desc')->get();
$list = Category::getcates();
//dd($list);
return view('admin.category.index')->with('list',$list);
}
最后到blade模板里面在相应的地方修改
<div class="form-group">
<label for="pid">上级分类</label>
<select class="form-control" name = 'pid' id="pid">
<option value="0">顶级分类</option>
@foreach ($cates as $item)
//使用三元运算符如果level是0的话名称前面是空,否则前面带一条竖线,同时根据level属性重复字符‘-----’
<option value="{{$item->id}}">{{($item->level==0)?'':'|'}}{{str_repeat('-----',$item->level)}}{{$item->name}}</option>
@endforeach
同时添加分类的时候在相应blade视图模板里面添加{{$item->id}}">{{($item->level==0)?'':'|'}}{{str_repeat('-----',$item->level)}}{{$item->name}}