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'],])}
```函数