Thinkphp5 简单上手一

thinkphp5是一个全新的版本它不再兼容以前的版本,改动比较大。个人认为它很像YII2,如果你是YII2的老司机,上手tp5学习成本会比较小。TP5首次支持使用composer的方式安装,看起来更加具有现代框架的气质。本文不打算写成文档,虽然TP的官方文档值得呵呵。只记录一些个人觉得有点价值的东西和大家分享,希望能帮大家少踩一些坑~

1.关于dump方法(将变量,对象数组等以更友好的方式打印出来)

正常情况下dump打印出来的数组和变量是友好的,有适当的缩进排版。不过也有特珠的情况,如果你和我一样使用wampServer之类的在本机调试,很可能默认开启了Xdebug。解决方法是在php.ini当中关掉xdebug。

2.关于$_EVN(全局环境变量)打印出来是空的数组

解决方法依然是改php.ini将variables_order = "EGPCS",不过不推荐改配置,据说是影响性能,而且thinkphp5.0封装了一些获取环境变量的方法,更好的做法是在核心文件夹的同级创建.env文件,在里面以key=>value的方法如:

env_type=test

使用\think\Env::get("env_type")来获取值,利用这种方式可以方便在本机和服务器以及开发测试环境当中部署不同的配置文件

3.在tp5当中配置使用redis

首先在config.php当中加入redis的配置如下,可以从核心文件夹的惯例配置文件convention.php中复制,

return [
    'redis'=>[
        'host'      => '127.0.0.1',
        'port'      => 6379,
        'password'  => '',
        'select'    => 0,
        'timeout'    => 0,
        'expire'    => 0,
        'persistent' => false,
        'prefix'    => '',
        ],
];

然后就可以在控制器中使用如下代码方便的进行操作redis了

$opt = Config::get("redis");
$res = new Redis($opt);
$name = $res->get("name");
echo $name;
4.关于Request对象

Request请引入命名空间think\Request;

如下是常用的方法,就不一一解释了

dump($req->method());
dump($req->pathinfo());
dump($req->path());
dump($req->get());//普通get格式
dump($req->param());//pathinfo的参数
dump($req->post());
session("username","damon");
dump($req->session());
cookie("age",33);
dump($req->cookie());
dump($req->cookie('PHPSESSID'));
dump($req->module());
dump($req->controller());
dump($req->action());
dump($req->url());
dump($req->baseUrl());
5.关于改变Response类型

不推荐使用类似于echo json_encode($arr);之类的代码,推荐使用tp5提供的方式来改变返回类型,方法是改变配置项中的default_return_type

参考如下代码:

$res = [
    "code"=>100,
    "result"=>[
        "list"=>[1,2,3,4,5,6]
]
];
Config::set('default_return_type','xml');
//Config::set('default_return_type','json');
//Config::set('default_return_type','jsonp');
return $res;
6.打印所有的当前所有配置项
dump(config());
7.修改配置文件目录

修改public文件夹下的index.php当中代码,并在合适的目录新建配置文件目录

define('CONF_PATH', __DIR__.'/../conf/');
8.为各模块创建单独的配置文件,只对本模块有效

在配置文件目录中以模块名如admin创建子文件夹,并在子文件夹中新建config.php

9.在controller中传递变量,在view中接受变量
  • assign
$this->assign("aa","hahaha");
  • fetch
return $this->fetch('viewdemo',[
    'name'=>'hello',
    'description'=>'world'
]);
  • share
\think\View::share('bb','bbb');

在视图当中可以使用{$name} {$aa} {$description} 展示变量的值,视图中仍然支持原生的写法,更多的替换写法,请自行google或者参看文档

10.不使用模板渲染页面
return $this->display('hello,{$content}',[
    "content"=>"world!"
]);

hello,{$content}这段代码只能用单引号包裹,如果要用双引号请在$前面加上转义符\,否则会报错

11.修改模板引擎标签标记,来解决tp跟前端框架的冲突如vue.js等

解决方法:修改配置项

'tpl_begin' => '{',

// 模板引擎普通标签结束标记

'tpl_end'      => '}',
12.全局替换视图中的字符串

修改配置项

// 视图输出字符串内容替换
'view_replace_str'      => [
    'hello'=>'olleh'
],

完成以上配置,相关作用域的hello字符串将全部替换成olleh

13.在视图中使用引用css图片等资源

在视图中可以直接使用__ROOT__,__STATIC__,__CSS__,__JS__,__URL__等方式引用正确的路径

比如

<img src="__STATIC__/images/psb.jpg"/>
14.在视图中使用$Think访问系统变量

如:

$Think.session.name //获取session中的变量
$Think.cookie.age //获取cookie中的变量
$Think.server.HTTP_HOST //获取$_SERVER中的变量
$Think.get.id //获取get中的变量
$Think.post.email //获取post中的变量
$Think.const.APP_PATH//获取系统中的常量
$Think.APP_PATH等同于上面的方式
15.在模板当中使用注释
{/*

    我是模板注释kwgwgwgfdfdskfskdddsdffdfadfsdfddd

*/}
16.在视图中使用原生插入原生代码

在视图中可以使用<?php ?>标签插入原生代码,或者使用{php} {/php}标签对,在当中插入普通的php代码即可

17.在视图中遍历数组的常用方法
  • volist
{php}
    $empty = '没有数据';//当填充数据为空时,替换模板
{/php}

{volist name="data" id="item" empty="$empty" key="i" offset="0" length="3" mod="1"}
    {$i}=>{$item.name}--{$item.age}
{/volist}
  • foreach
{foreach $data as $item}
    {$i}=>{$item.name}--{$item.age}
{/foreach}
  • for
{for start="1" end="10" step="2" name="i"}
    {$i}<br/>
{/for}
18.在视图中使用比较标签
  • eq(equal)
{eq name="val1" value="11"}
    等于11
{else/}
    不等于11
{/eq}
  • neq
{neq name="val1" value="10"}
    不等于10
{else/}
    等于10
{/neq}
  • gt
{gt name="val1" value="5"}
    大于5
{else/}
    小于等于5
{/gt}
  • lt
{lt name="val1" value="10"}
    小于10
{else/}
    大于等于10
{/lt}
  • egt
{egt name="val1" value="10"}
    大于等于10
{else/}
    小于10
{/egt}
  • elt
{elt name="val1" value="10"}
    小于等于10
{else/}
    大于10
{/elt}
  • 与变量的比较需要加上$符
{eq name="val1" value="$val2"}
    val1 = val2
{/eq}
19.在模板中使用条件判断标签
  • switch
{switch name="val1"}
    {case value="1"}1{/case}
    {case value="5"}5{/case}
    {case value="10"}10{/case}
    {case value="15"}15{/case}
    {case value="20"}20{/case}
    {case value="30|40|50"}30 or 40 or 50 {/case}
    {default/}0
{/switch}
  • range
{range name="val2" type="in" value="1,2,3,4,5"}
    val2 in vals
{else/}
    val2 not in vals
{/range}
  • in
{in name="val2" value="1,2,3,4,5"}
    val2 in vals
{else/}
    val2 not in vals
{/in}
  • notin
{notin name="val2" value="1,2,3,4,5"}
    val2 not in vals
{else/}
    val2 in vals
{/notin}
  • between
{between name="val2" value="1,10"}
    val2 between 1-10
{else/}
    val2 notbetween 1-10
{/between}
  • notbetween
{notbetween name="val2" value="1,10"}
    val2 notbetween 1-10
{else/}
    val2 between 1-10
{/notbetween}
  • defined
{defined name="APP_PATH"}
    APP_PATH is defined.
{else/}
    APP_PATH is not defined.
{/defined}
  • if
{if condition=" ($val2 != 2) AND ($val2 !=3) "}
    $val2 != 2 and $val2 !=3
{else/}
    $val2 = 2 or $val2 = 3
{/if}
20.在视图中使用布局文件

修改如下配置项,开启使用布局文件

'template'               => [
            'layout_on' => true,
            'layout_name' =>'layout',
        ],

TP5中使用布局文件的方式和YII2.0当中使用布局文件的方式几乎是一致的
布局文件中使用{__CONTENT__}代替具体渲染的view页面内容

21.使用include方式引用公共部分
{include file="common/footer"/}//将公共部分单独存放,使用include引入
22.在使用布局的页面中修改不同的页面标题
<title>{$title}</title><!---layout----->

$this->assign([
            'title'=>'page1'
]);//在对应的controller ->action中分配变量
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容