-
thinkphp是一个单入口文件框架;所有请求都通过public文件夹下的index.php进入,通过携带不同的参数,转发到相应的控制器中来实现相应的功能;
单入口文件的定义: 应用程序所有的http请求都由一个文件接收并由该文件转发到功能代码中
在入口文件中可以进行以下操作:
1.必须引入thinkphp框架的引导文件(它可以帮助过滤些网站的安全、检测的问题)
2.可以在这里定义在thinkphp/base.php中有的一些常量,如应用目录常量、配置文件目录常量等。没定义的话则会使用base.php中的默认值。查看全部 -
在每个方法执行之前都会先执行
public function __construct(){
config('key', 'value');
}
查看全部 -
<?php namespace app\index\controller; class Index{ public function index(){ //return view(); #默认找app/index/view/index/index.html //return view('upload'); #默认找app/index/view/index/upload.html // return view('**/upload'); #默认找app/index/view/index/**(上级文件目录)/upload.html //return view('./upload.html'); #默认找入口文件同级目录下的upload.html注意必须加.html后缀! return view('index',[ 'email' => 'abc@qq.com',//如在对应html文件中添加<h1>{$email}</h1>(即数组的key,注意表示方式)则会输出abc@qq.com 'adress' => 'hahaha' ],[ 'STATIC' => '当前是STATIC的替换内容'//如在对应html文件中添加<h1>STATIC</h1>(即数组的key,注意表示方式)则会输出''中的文字 ] ); } }
查看全部 -
fetch直接使用模板文件
display直接将字符串进行模板替换和变量输出
在接口中需要提供界面,没有使用模板文件,可以直接使用display,传递的第一个参数是字符串
开发有前台的建议用fetch,可以使MVC分离:创建view层级,新建模板文件,直接将fetch的第一个参数指向这个模板文件
------------------------------
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
# 默认模板地址
# app/index/view/index/index.html
# 传递第一个参数 修改模板文件目录
# (修改为upload)app/index/view/index/upload.html
# (public/upload)app/index\view\public\upload.html
# 如果以./开头,那么就找到入口文件下同级开始的模板文件
/*return view('index',[
'email' => '123@qq.com',
'user' => 'rui'
],[
'STATIC'=>'当前是static的替换内容'
]);*/
//以./开头,默认入口在public目录下
//想在html中使用变量的输出以及函数等,要用{}
//$this->assign('assign','assign传递的值');
/*return $this->fetch('index',[
'email' => '123@qq.com',
'user' => 'rui'
],[
'STATIC'=> '当前是static的替换内容'
]);*/
$this->assign('user','imooc');
return $this->display('这是一个{$email}字符串{$user}',[
'email' => '123@qq.com'
]);
}
}
-----------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>这是index.html,在app/index/view/index目录下</h1>
<p>{$email}</p>
<p>{$user}</p>
<p>{$assign}</p>
<p>STATIC</p>
</body>
</html>
------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>这是upload.html,在app/index/view/index目录下</h1>
</body>
</html>
---------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>这是public/upload.html,在app/index/view/public目录下</h1>
</body>
</html>
--------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>这是public/html/index.html</h1>
</body>
</html>
---------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>这是public/index.php同级的123.html</h1>
</body>
</html>
查看全部 -
可以在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);
}
}
查看全部 -
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}
查看全部 -
此变量为系统中已经定义好的可替换指定路径的变量
同时,该变量还可在项目应用配置文件中 view_replace_str 进行设置(可设置其他的自定义变量),主要是为了方便当系统的css或js文件位置改变时,页面无法加载js、css样式的情况,通过定义该变量,若样式路径发生改变,只需在配置文件中进行修改即可,除tp5外,tp3.x版本中不具备此项功能变量的调用具有加载优先性,tp核心配置文件中的最优先-》应用配置文件-》方法中配置文件 最后会进行依次覆盖
查看全部 -
还可以通过调用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()方法,这会导致视图层不可用
查看全部 -
获取请求对象的三种方式
$request = request( );
dump($request);即可打印出请求的对象
需要先加载request命名空间
use think\Request;
public function index( ){
$request = Request::instance( );
dump($request);即可打印出请求的对象
}
需要先加载request命名空间
use think\Request;
在方法中传入request对象参数 如下:
public function index(Request $request){
dump($request);
}
查看全部 -
1.先在应用配置文件中定义
conf/config.php/
'url_route_on' => true,
'url_route_must'=> false,这两条规则
2.然后再conf文件夹下新建自定义路由文件route.php.定义规则return ['news/:id' =>'Index/index/ppap']; 3.public function ppap($id) {
echo url('Index/index/ppap',['id'=>17]).'<br/>';
return "{$id}";
}
运行此url localhost/news/5.html 改方法输出
/news/17.html(tp5路由会根据路由规则自动匹配 url助手函数会生成正确的url)
5(根据路由规则匹配到的ID)
查看全部 -
thinkphp5查看全部
-
对不同环境下工作的人员可通过同一文件,进行简单的参数配置,就可以在他需要的环境下正常运行
环境变量ENV配置和使用的实现
a.在web访问的目录下创建.env配置文件
b..env的配置:例如status=dev,[database] host=local user=root password=123456,表示一组参数
c.config.php,与环境变量相关的都从.env配置文件中获取值
<?php
use think\Env;
return [
'app_status' => Env::get('status','dev');
];
使用Env::get()方法获取配置的参数值;对于组参数需要这样使用Env::get(database.user)
查看全部 -
config()助手函数功能使用 1.设置一个配置参数:config('user_name', 'david', 'index'),设置的参数名为user_name,值为david,作用域为index 2.获取一个配置参数:config('user_name', 'index'),获取的参数名为user_name,是从作用域为index中获取 3.判断配置参数是否存在:config('?user_name'),必须带上?,且放在参数名之前查看全部
-
.env的值dump不出来的原因:在TP5的新版中,已经取消了环境变量的优先识别,所以需要使用环境变量必须通过Env类来读取,改了php.ini文件variables_order = "EGPCS"之后,只是可以dump出环境变量,.env依然读取不到,该处不是bug,只是新旧版本的机制不同罢了 不建议修改php.ini文件的variables_order,导致一些性能损失。查看全部
-
TP5开发规范: * 目录命名、配置参数、非类库文件名、表名、字段名:小写+下划线 * 类文件名和其内的类名:驼峰,首字母大写,两者名字要一样 * 函数、属性名:驼峰,首字母小写 * 常量:大写字母+下划线 * 类文件名均以.php结尾 * 类文件的命名空间和类文件所在的路径一致 * 以双下划线__开头的函数或方法为魔术方法 * 应用的类库文件的命名空间,最顶级的统一为app查看全部
举报