thinkphp5.1學習筆記

tp配置技巧

配置的get和set

tp5.1的配置在config目錄裏,一個文件是一個一級配置項,每一個文件一行是二級配置項。php

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 方法同名,會出錯,須要以下:html

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裏json

<?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鏈接: 數據庫類型://用戶名:密碼@數據庫地址:端口號/數據庫名稱/字符集app

增刪改查

<?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時,須要用後者。
{php} echo mb_strcut(\(vo['text'],0,150,'utf-8');{/php} ### url生成示例 ``` {:url('index/index/detail',['id'=>\)vo['id'],])}
```函數

相關文章
相關標籤/搜索