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 方法同名,會出錯,須要以下: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類在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 <?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'],])}
```函數