-
可以在conf文件中创建对应模块的配置文件进行配置,也可以在方法内传递参数配置。但是实际开发中会在入口文件或者构造方法来统一的修改访问类型
<?php
return [
'default_return_type' =>'xml'
];特殊封装,不需要在每个方法里都传递这样的参数,可以通过入口/构造方法来统一修改返回类型
响应对象Response
1.针对某一个模块返回其他格式类型,那么需要给在conf文件中创建对应模块的配置文件config.php中配置default_return_type
2.针对某一个操作返回特殊的类型,那么可以通过动态配置实现
在TP5中不允许在控制器和方法里die(),因为响应有可能发生问题
一般在控制器里面直接return 数据,默认格式为html,默认会调用response对象出输出数据,如果需要对数据格式进行修改,第一种在config.php中修改,这个设置全局的,如果想对某个控制器的数据进行修改,一般在控制器里面动态设置返回格式
<?php
namespace app\api\controller;
use think\Config;
class Index
{
public function getUserInfo($type='json')
{
if(!in_array($type,['json','jsonp','xml']))
{
$type = 'json';
}
Config::set('default_return_type',$type);//动态配置,这样就不用修改配置文件,可以通过同一个方法返回不同的响应对象
$data = [
'code'=>200,
'result'=>[
'username'=>'rui',
'email'=>'123@qq.com',
'gender'=>'female'
]
];
return $data;
//html返回的是字符串,当前返回的是数组,无法解析
}
}
<?php
namespace app\index\controller;
use think\Request;
use think\Config;
class Index
{
public function index(Request $request)
{
$res = [
'code'=> 200,
'result'=>[
'list' =>[1,2,3,4,5,6]
]
];
Config::set('default_return_type','xml');
return $res;
//dump($res);
}
}
查看全部 -
Request.php有更多可供参考
helper.php中创建函数的方法的值得学习,先判断一下是否存在
tp5用$rquest->param()获取传递过来的参数,如果参数有重复的情况会覆盖,覆盖的规则如下:pathinfo参数会覆盖post中的参数,post中的参数会覆盖get中的参数。
1、input助手函数也是获取对象里面的参数. input('传递方式','参数','对参数过滤')
注意获取请求的参数值,尽可能带上请求的方式,如:input(get.id) ,如果获取的值不存在时,可通过第二个值进行默认值设置,第三个值用来过滤获取的值,例如可将值转换成intval
2、同时也可以通过request对象下的相关方法获取对应的参数或值,来对值进行相关操作
<?php
namespace app\index\controller;
use think\Request;
class Index
{
public function index(Request $request)
{
//dump($request->param());//param方法会返回post,get,pathinfo传递的所有值,即合并
//http://localhost/imooc/public/index/index/index/type/5.html?id=10
//$res = input('get.id');//10
//dump($request->get('id'));//10
//$res = input('post.id','100');//没有则默认100,结果100
//dump($request->post('id','100'));//100
//$res = input('post.id','abc','intval');//没有则默认100,结果100
//dump($request->post('id','100'));//100
#获取类型
//'get', 'post',
//'put', 'patch',
//'delete', 'param',
//'request', 'session',
//'cookie', 'server',
//'env', 'path', 'file'
//通过input助手函数对request中参数进行获取,建议使用request对象,避免重复定义相同函数
//$res = input('patch.id');
//session('emial','987@qq.com');
//dump(input('session.emial'));
//dump(input('session.emials','imooc@qq.com'));//不存在默认imooc
session('ss',' 123 ');
$res = $request->session('ss','','trim');//trim过滤
dump($res);
}
}
查看全部 -
包含和继承
视图层页面通过include方式加载公共页面
{inclue file="common/nav" /}
继承 一个页面呢可继承另外的页面
{extend file="common/base" /}
同一个页面中不允许有两个同样的block name
block表示替换被继承的页面中指定的样式或者标签
{block name="title"}
要替换的值
{/block}
layout
layout 'layout_on' =>'true' 'layout_name'=>'a'开启后默认的访问view文件机制发生变化,
会访问view/a.html,
a.html 中的{__CONTENT__}的内容会被index控制器下指定方法对应view/index/*.html文件内容替换,
从而 达到访问不同的方法,改方法对应的view文件会显示不同的内容
若要改变其他共有的部分,还可通过控制器层使用$this -> assign传值
通过给方法传递参数() a.html可以显示不同的内容
查看全部 -
swith标签 Think.get.level通过URL传参获得
{switch name="Think.get.level"}
{case value="1|4"}<p>1</p>{/case} 1|4表示当get的传参值等于1或4时
{case value="2"}<p>2</p>{/case}
{case value="3"}<p>2</p>{/case}
{default/}<p>other</p>
{/switch}
range标签
type的值为between、notbetween、in、notin
当type值为in、notin时,value的值可以为多个整数如:1,2,3,10
当type值为between、notbetween时,value的值只能为两个整数如:1,10
{range name="Think.get.level" value="1,10" type="notbetween"}
<p>当前的level值不在1到10之间</p>
{else/}
<p>当前的level值在1到10之间</p>
{/range}
defined标签 判断常量是否被定义
{defined name="APP_PATH_NO"}
<p>APP_PATH_NO已定义</p>
{else/}
<p>APP_PATH_NO未定义</p>
{/defined}
if标签 条件判断
{if condition="($Think.get.level==1)"}
<p>当前的值为1</p>
{else/}
<p>当前的值不为1</p>
{/if}
查看全部 -
介绍thinkphp5比较标签
eq neq equal lt gt elt egt
格式如下:
{eq name="a" value="$b"}
{else/}
{/eq}
查看全部 -
1、index.php
2、thinkphp-》start.php
3、start.php里App::run()返回Response对象,Response->send()调用send的方法
run方法来源 thinkphp->library->think->App.php里run方法返回request对象,run()方法只执行一次
thinkphp->library->think->Request.php(更多的$request请求获取可参照,了解更多方法)
常用的Request操作:
<?php
namespace app\index\controller;
use think\Request;
class Index{
public function index(Request $request){
// 获取浏览器输入框的值/url中的值
// .html可以帮助我们提高安全性,不可以分辨出使用的开发语言
dump($request->domain());//http://jianpf.com域名
dump($request->pathinfo());//index/index/index.html
dump($request->path());//index/index/index
# 请求类型
dump($request->method());//GET请求
dump($request->isGet());//GET请求true
dump($request->isPost());//POST请求true
dump($request->isAjax());//Ajax请求true
#请求参数(从TP5开始,所有的get不包含pathinfo的传值)
dump($request->get());
dump($request->param());
dump($request->post());
/*启用session要修改config,不然不保存
tp\thinkphp\convent.php下的第198行
session=>['auto_start'=>ture]和删除session安全'httpponly'和'secure'配置
在conf模块下config中添加*/
//session('name','rui');//助手函数
dump($request->session());
//cookie('email','654321@qq.com');//助手函数
dump($request->cookie());
# 获取数组中的单个值,直接传递参数获取
dump($request->param('type'));
dump($request->cookie('email'));
dump($request->session('username'));
#获取当前是哪个模块\控制器\操作,再操作,用于调试
dump($request->module());
dump($request->controller());
dump($request->action());
dump($request->url());//当前.URL ./index/Index/index/type/5.html?id=10
dump($request->baseUrl());//不用?号后的参数
}
}
查看全部 -
volist:一般循环select结果(二维数组) * 格式:{volist name="list" id="a"}<p>{$a.email}</p>{/volist} * 参数说明: * name:控制器中分配的数组变量名 * id:当前循环变量名,一维的key * offset:偏移量,表示从指定单元位置开始遍历。数组第一个单元为0。 * length:遍历次数 * mod:当前的单元位置对mod值取余。数组第一个单元位置为0。 * key:默认为i,可自定义,是代表循环第几次 * empty:定义当数组为空的情况下的说明文字,可以是字符串也可以是变量(变量建议在控制器内分配,在变量内可使用html标签),字符串的时候不能直接使用html标签。 * 可以直接使用$key输出索引,也就是数组下标名 foreach * 第一种最简单的格式: {foreach $list as $vo} <p>{$vo.email}</p>{/foreach} * 第二种格式:{foreach name="list" item="vo"} * 可以直接输出索引$key,也可以在foreach里面定义 key="s"来定义索引变量名 for * 格式:{for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" } {/for} * comparison默认是lt,也就是小于,start小于end * step默认是1 * name默认是i,可以修改 * 等同于 for($i=1;$i<10;$i++)
查看全部 -
tp5中视图层页面 变量需要用到php函数处理的情况
tp5中视图层页面 可以直接对变量进行运算符设置,如图:
tp5张视图层页面,变量的输出,及不同的注释如图:
{liteal}
liteal标签中的变量不会被编译
{/liteal}
查看全部 -
获取请求对象的三种方式
1、助手函数
$request = request( );
dump($request);//即可打印出请求的对象
2、使用think下的request类获取实例
需要先加载request命名空间
use think\Request;
public function index( ){
$request = Request::instance( );
dump($request);即可打印出请求的对象
}
3、直接注入到方法(建议使用)
需要先加载request命名空间
use think\Request;
在方法中传入request对象参数 如下:
public function index(Request $request){
dump($request);
}
查看全部 -
conf——config.php
配置路由
public下新建route.php文件
'auto_bind_module' => true,
'url_route_on' => true,
'url_route_must' => false
index模块下
public function info($id)
{
//http://localhost/imooc/public/index/index/info/id/5
//localhost/imooc/public/news/5.html
echo url('index/index/info',['id' => 10])."<br>";
return "{$id}";
}
'url_route_must'改为true后,要在route.php文件配置路由'index/index/demo'=>'index/index/demo'
查看全部 -
也可输入php的原生标签,但一般系统中视图页面不建议编写原生标签,逻辑较复杂,不利于系统后期维护
查看全部 -
此变量为系统中已经定义好的可替换指定路径的变量
同时,该变量还可在项目应用配置文件中 view_replace_str 进行设置(可设置其他的自定义变量),主要是为了方便当系统的css或js文件位置改变时,页面无法加载js、css样式的情况,通过定义该变量,若样式路径发生改变,只需在配置文件中进行修改即可,除tp5外,tp3.x版本中不具备此项功能变量的调用具有加载优先性,tp核心配置文件中的最优先-》应用配置文件-》方法中配置文件 最后会进行依次覆盖
查看全部 -
可以通过图中的4种方式向页面中赋值,调用View::share() View控制器时需要加载 use think\View的命名空间 若要使用$this->view->key2 = '某一个字符' $this -> assign() $this > fetcch这 3种方法都需要extends Controller
查看全部 -
入口文件绑定
绑定模块一般用于API接口生成等,适用于小型企业网站,一个控制器够用的情况,大型项目不建议使用。
开启thinkphp绑定模块,方法2种:
1. 在public下新建api.php文件
<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/');
define('CONF_PATH', __DIR__ . '/../conf/');
// 加载框架引导文件
require (__DIR__ . '/../thinkphp/start.php');
新建与php文件相同名字的模块api。在public下可创建多个入口文件,可实现不同入口文件访问不同模块。入口文件名与模块文件名相同时,自动访问与之对应的模块。
conf->config.php 配置自动绑定 auto_bind_module" => true 相当于public下api.php文件define("BIND_MODULE","api");
当访问localhost/api.php时只能访问api模块下的内容,不可以访问其他模块
2. 手动绑定:模块->控制器->方法
public\index.php入口文件指定默认模块
define('BIND_MODULE','admin');//定义此常量,访问public/admin.php入口文件时,则默认绑定admin模块,可以访问控制器->方法
define('BIND_MODULE','admin/index');//绑定admin模块index.php文件(只能传递方法)
查看全部 -
还可以通过调用Controller控制器的fetch方法 调用指定的view文件
调用前需要加载use think\Controller 命名空间,并在指定的应用控制器中extends Controller类
$this-> fetch()各参数同view()助手函数相同,区别是fetch()方法也可使用
$this -> assign()方法传递变量的视图层(此方法需继承Controller类才可调用)即tp3.x版本相同,view()方法不能调用此方法
与tp3.x版本不同的是,$this->display()是直接在控制器中输出要显示的字符串,原3.x版本表示的是调用视图层,也可使用$this -> assign()方法,webserver项目中不建议使用$this->display()方法,这会导致视图层不可用
查看全部
举报