thinkphp5项目--企业单车网站(六)

thinkphp5项目--企业单车网站(六)

 

项目地址

fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Website
https://github.com/fry404006308/BicycleEnterpriseWebsite

 

1、thinkphp数据库字段操作很多都支持直接数组方式

$res=db('cate')->update($dataIn);

 

 

2、数组的访问方式

数组在控制器中是['']的访问方式

if($v['pid']==$id) return ture;

 

数组在视图界面是.(点)的访问方式

<td >{if condition="$vo.level neq 0"}|{/if}<?php echo str_repeat('----',$vo['level'])?>{$vo.catename}</td>

 

 

3、关于编程的教学

直接按照书上的一章一章的讲,太无趣了。因为这样一章一章的书直接叫做参考手册好了,比之于直接叫做书的话。

直接以项目起手,用到哪,讲到哪,整个项目做完,再来整个系统讲解所有知识点(可以结合项目的案例讲啊)。

我教算法的经历,我自学编程的经历,学java,学php,都验证了这一点。

 

 

4、控制器前置操作

前置操作

可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList 属性可以指定某个方法为其
他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法。
['except' => '方法名,方法名']
表示这些方法不使用前置方法,
['only' => '方法名,方法名']
表示只有这些方法使用前置方法。
示例如下:

namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    protected $beforeActionList = [
    'first',
    'second' => ['except'=>'hello'],
    'three' => ['only'=>'hello,data'],
    ];
    protected function first()
    {
        echo 'first<br/>';
    }
    protected function second()
    {
        echo 'second<br/>';
    }
    protected function three()
    {
        echo 'three<br/>';
    }
    public function hello()
    {
        return 'hello';
    }
    public function data()
    {
        return 'data';
    }
}

访问
http://localhost/index.php/index/Index/hello
最后的输出结果是
first
three
hello


访问
http://localhost/index.php/index/Index/data
的输出结果是:
first
second
three
data

项目实例:

无限分类中删除栏目的话删除所有孩子

控制器:

 1 <?php
 2 namespace app\admin\controller;
 3 use think\Controller;
 4 use app\admin\model\Cate as ModelCate;
 5 
 6 use app\admin\controller\Base;
 7 
 8 class Cate extends Base
 9 {
10     //前置方法
11     protected $beforeActionList=[
12         'delChilden'=>['only'=>'del'],
13     ];
14 
15     //删除无限分类的第二种方法:删除掉这个栏目及所有的孩子
16     public function del(){
17         //1、在前置方法里面删掉所有孩子
18         //2、在当前方法里面删除这条数据
19         $id = input('id');
20         $res = db('cate')->delete($id);
21         if($res){
22             $this->success('删除栏目成功','cate/lst');
23         }else{
24             $this->error('删除栏目失败');
25         }
26     }
27 
28     //删除前删除所有的孩子
29     public function delChilden(){
30         //1、获取要删除孩子的栏目id
31         $id = input('id');
32         //2、在模型中找到这个id对应的所有孩子
33         $modelCate=new ModelCate();
34         $ids=$modelCate->getChilden($id);
35         //3、在数据库中删除所有孩子
36         if($ids){
37             $res = db('cate')->delete($ids);
38             if(!$res) $this->error('删除当前栏目的子栏目失败');
39         }
40         
41     }
42 
43 }

模型:

 1 <?php
 2 namespace app\admin\model;
 3 use think\Model;
 4 
 5 class Cate extends Model
 6 {
 7 
 8     //获得指定id的所有孩子的数组
 9     public function getChilden($id){
10         $data=$this->select();
11         $res=$this->getChildenId($data,$id);
12         // dump($res);die;
13         return $res;
14     }
15 
16     //获得指定id的所有孩子的数组
17     public function getChildenId($data,$id){
18         static $arr=array();
19         foreach ($data as $k => $v) {
20             if($v['pid']==$id){
21                 $arr[]=$v['id'];
22                 $this->getChildenId($data,$v['id']);
23             }
24         }
25         return $arr;
26     }
27 }

 

 

5、php递归使用

 1 /**
 2  * 无线分类重新排序:使得那些栏目的顺序是对的,父级栏目在子级标题之上
 3  * 这其实是一个再简单的递归也没有了,作为递归,访问标签页没有加
 4  * @param  [type]  $data  传入的栏目数组
 5  * @param  integer $pid   父级栏目id,顶级栏目的id为0
 6  * @param  integer $level 栏目等级,初始等级为0
 7  * @return [type]         排序好的栏目的数据
 8  */
 9 public function sort($data,$pid=0,$level=0){
10     static $arr=array();
11     foreach ($data as $k => $v) {
12         //如果子级的父级id等于传传过来要查找的父级id,说明自己是这个父级id的孩子
13         if($v['pid']==$pid){
14             $v['level']=$level;
15             $arr[]=$v;
16             //在这个$data数组中去递归找它的孩子
17             $this->sort($data,$v['id'],$level+1);
18         }
19     }
20     return $arr;
21 }

还要注意这里的默认参数

 

6、无限分类删除

如果做无限分类的时候删除栏目的时候想删除这个栏目及所有孩子,算法思路如下

1、递归找到它的所有孩子的id(这个挺简单的)

2、用delete的批量删除主键的方法即可删除(查看手册里面的批量删除)

Db::table('think_user')->delete([1,2,3]);

 

 

7、静态数组使用

 1 //获得指定id的所有孩子的数组
 2 public function getChildenId($data,$id){
 3     static $arr=array();
 4     foreach ($data as $k => $v) {
 5         if($v['pid']==$id){
 6             $arr[]=$v['id'];
 7             $this->getChildenId($data,$v['id']);
 8         }
 9     }
10     return $arr;
11 }

看声明,=array()

看赋值,$arr[]=

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值