thinkphp5.1学习笔记

tp配置技巧

配置的get和set

tp5.1的配置在config目录里,一个文件是一个一级配置项,每个文件一行是二级配置项。

use think\facade\Config;//导入Config 门脸
 public function get(){
        //获取全部配置
//        dump(Config::get());
        //只获取app配置项
        dump(Config::get('app.'));
        dump(Config::pull('app'));
        //获取二级配置项
        dump(Config::get('app.app_debug'));
        dump(Config::get('app_debug'));//由于app是默认一级配置项,可以省略
        dump(Config::has('default_lang'));//检查是否有这个配置项,true/false
        dump(Config::get('database.hostname'));
    }
    public function set(){
        //动态设置,静态设置是修改配置文件
        dump(Config::set('app_debug'));
    }
}

使用助手函数

public function helper(){
        //助手函数不依赖于Config,不需要导入Config类
        //dump(config());//获取全部配置,相当于Config::get()
        dump(config('default_lang'));
        dump(config('?default_lang'));//查看是否存在,true/false
        dump(config('database.hostname','localhost'));//设置,返回新的设置值localhost
    }

trait

trait 方法优先级小于父类,
当两个trait 方法同名,会出错,需要如下:

     use Demo1 ,Demo2{
     Demo1::hello insteadof Demo2;
    Demo2::hello as Demo2hello;
}

容器/依赖注入/静态代理/请求对象

容器与依赖注入的原理

任何url的访问都是定位到控制器的,

<?php
namespace app\index\controller;
class Demo1
{
   public function d1(\app\common\B $b){//拿B做参数,当访问的d1方法自动实例化一个B,但是URL里不含参数。
       $b->speak();
   }
}
<?php
namespace app\common;
class B
{
    public function speak(){
        echo "i am b and i am speaking";
}

}
调用  /index/Demo1/d1  ,得出i am b and i am speaking,

绑定一个类到容器

<?php
namespace app\common;
class B
{
    private $name;
    public function __construct($name='peterz')
    {
        $this->name=$name;
    }
    public function speakName(){
        echo 'my name is'.$this->name;
    }

}
<?php
namespace app\index\controller;
class Demo1
{

   public function bindClass(){
       \think\Container::set('Balias','app\common\B');
    //或者使用bind('Blias','app\common\B)
       $bb=\think\Container::get('Balias',['name'=>'constru']);
//或者使用app('Balias',['name'=>'constru']);
       echo $bb->speakName();
   }

}
访问http://localhost/tp5/public/index.php/index/Demo1/bindClass,得到:my name isconstru

将闭包绑定到容器

<?php
namespace app\index\controller;
class Demo1
{
   public function bindClosure(){
       \think\Container::set('CC',function($param){
           return  'this is params:'.$param;
       });
       return \think\Container::get('CC',['param'=>'parameters']);
   }
}
访问http://localhost/tp5/public/index.php/index/Demo1/bindClosure,得到this is params:parameters

facade静态代理使用

facade类在think\facade里

<?php
namespace app\common;
class B
{
    public function speak($param){
        return 'i am '.$param;
    }
}
<?php//这是B类的代理
namespace app\facade;
class Testfacade extends \think\facade
{
    protected static function getFacadeClass(){
        return '\app\common\B';
    }

}
<?php//测试
namespace app\index\controller;
class Demo1
{
   public function d1(){
       return \app\facade\Testfacade::speak('tom');
   }
}
http://localhost/tp5/public/index.php/index/Demo1/d1    输出: i am tom

动态代理

<?php
namespace app\common;
class B
{
   public function speak($p){
       return $p;
   }
}
<?php
namespace app\facade;
class Testfacade extends \think\Facade //什么也不写,就是一个facade类
{

}
<?php
namespace app\index\controller;
class Demo1
{
    public function d1()
    {
        \think\Facade::bind('app\facade\Testfacade','app\common\B');//动态代理,注意参数里app前面不要加\
        return \app\facade\Testfacade::speak('tim');
    }
}

控制器

控制器不依赖于Controller,但推荐继承Controller,
控制器里返回值一般是字符串,一般是return,
默认输出格式是html,也可以指定为其他的,比如 json,

request

使用静态Request
<?php
namespace app\index\controller;
use \think\facade\Request;
class Demo1
{
    public function d1()
    {
        dump(Request::get());
    }
}
http://localhost/tp5/public/index.php/index/Demo1/d1?name=%27tom%27&age=30  
输出   array(2) {
  ["name"] => string(5) "'tom'"
  ["age"] => string(2) "30"
}
依赖注入方式:
 public function d1(Request $request)
    {
        dump($request->get());
    }
还可以用Controller里面的request
public function d1()
    {
        dump($this->request->get());
    }

数据库

配置

1,全局配置 config/databas.php
2,动态配置: think\db\query.php
3.DSN连接: 数据库类型://用户名:密码@数据库地址:端口号/数据库名称/字符集

增删改查

<?php
namespace app\index\controller;
use think\Db;
class Demo1
{

    public function d1()
    {
    /**
     * 数据库操作入口类Db,静态调用\think\db\query.php
     */
    $a=Db::table('student')
//        ->field('id,name')
        //SELECT `id` AS `编号`,`name` AS `姓名` FROM `student` WHERE `id` = 3 LIMIT 1
            ->field(['id'=>'编号','name'=>'姓名'])
        ->where('id','=',3)

        ->find();
    dump(is_null($a)?'meizhaodao':$a);
    }
    //查询多条
    public function d2(){
        $a=Db::table('student')
            ->field('id,name,gender')
            ->where([
                ['id','<',4],
                ['id','>',1],
            ])->select();
        foreach ($a as $b){
            dump($b);
        }
    }
    public function insert(){
        $data=[
            'id'=>6,
            'name'=>'ppp',
            'age'=>20,
            'gender'=>'boy',
        ];
//        return Db::table('student')->insert($data);//运行成功返回1
//        return Db::table('student')->data($data)->insert();
        //插入同时返回新增的主键
        return Db::table('student')->insertGetId('$data');
    }
    //多条插入
    public function  insertmany(){
        $data=[
            ['id'=>6, 'name'=>'ppp', 'age'=>20, 'gender'=>'boy',],
            ['id'=>6, 'name'=>'ppp', 'age'=>20, 'gender'=>'boy',],
        ];
        return Db::table('student')->insertAll($data);
    }
    public function update(){
//        return Db::table('student')->where('id',20)->update(['name'=>'ximenq']);
        //如果更新的是主键,比如id
        return Db::table('student')->update(['name'=>'ximenq','id'=>'20']);


    }//此外还可以原生查询
}

模型输出

 $nav=Catagory::where('id','>','0')->order('order')->select()->toArray();
       $this->assign('nav',$nav);
模板中
{foreach $nav as $key=>$vo}
{$vo.name}
{/foreach}
 $displayimg=Db::table('imageurl')->where('ifdisplay',1)->select();  //输出一样,不需要toArray();
       $this->assign('img',$displayimg);

模板中{\(vo.title},{\)vo['title']}都可以,但是嵌入php时,需要用后者。

url生成示例

{:url('index/index/detail',['id'=>$vo['id'],])}
posted @ 2018-04-24 21:36  可爱小灰灰  阅读(1446)  评论(0编辑  收藏  举报