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}}
 


 

 

 


 
 
posted @ 2020-08-08 05:02  孤单照夜清  阅读(234)  评论(0编辑  收藏  举报