Thinkphp5 簡單上手一

thinkphp5是一個全新的版本它不再兼容以前的版本,改動比較大。個人認為它很像YII2,如果你是YII2的老司機,上手tp5學(xué)習(xí)成本會比較小。TP5首次支持使用composer的方式安裝,看起來更加具有現(xiàn)代框架的氣質(zhì)。本文不打算寫成文檔,雖然TP的官方文檔值得呵呵。只記錄一些個人覺得有點價值的東西和大家分享,希望能幫大家少踩一些坑~

1.關(guān)于dump方法(將變量,對象數(shù)組等以更友好的方式打印出來)

正常情況下dump打印出來的數(shù)組和變量是友好的,有適當?shù)目s進排版。不過也有特珠的情況,如果你和我一樣使用wampServer之類的在本機調(diào)試,很可能默認開啟了Xdebug。解決方法是在php.ini當中關(guān)掉xdebug。

2.關(guān)于$_EVN(全局環(huán)境變量)打印出來是空的數(shù)組

解決方法依然是改php.ini將variables_order = "EGPCS",不過不推薦改配置,據(jù)說是影響性能,而且thinkphp5.0封裝了一些獲取環(huán)境變量的方法,更好的做法是在核心文件夾的同級創(chuàng)建.env文件,在里面以key=>value的方法如:

env_type=test

使用\think\Env::get("env_type")來獲取值,利用這種方式可以方便在本機和服務(wù)器以及開發(fā)測試環(huán)境當中部署不同的配置文件

3.在tp5當中配置使用redis

首先在config.php當中加入redis的配置如下,可以從核心文件夾的慣例配置文件convention.php中復(fù)制,

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.關(guān)于Request對象

Request請引入命名空間think\Request;

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

dump($req->method());
dump($req->pathinfo());
dump($req->path());
dump($req->get());//普通get格式
dump($req->param());//pathinfo的參數(shù)
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.關(guān)于改變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.為各模塊創(chuàng)建單獨的配置文件,只對本模塊有效

在配置文件目錄中以模塊名如admin創(chuàng)建子文件夾,并在子文件夾中新建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} 展示變量的值,視圖中仍然支持原生的寫法,更多的替換寫法,請自行g(shù)oogle或者參看文檔

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

hello,{$content}這段代碼只能用單引號包裹,如果要用雙引號請在$前面加上轉(zhuǎn)義符\,否則會報錯

11.修改模板引擎標簽標記,來解決tp跟前端框架的沖突如vue.js等

解決方法:修改配置項

'tpl_begin' => '{',

// 模板引擎普通標簽結(jié)束標記

'tpl_end'      => '}',
12.全局替換視圖中的字符串

修改配置項

// 視圖輸出字符串內(nèi)容替換
'view_replace_str'      => [
    'hello'=>'olleh'
],

完成以上配置,相關(guān)作用域的hello字符串將全部替換成olleh

13.在視圖中使用引用css圖片等資源

在視圖中可以直接使用__ROOT__,__STATIC__,__CSS__,__JS__,__URL__等方式引用正確的路徑

比如

<img src="__STATIC__/images/psb.jpg"/>
14.在視圖中使用$Think訪問系統(tǒng)變量

如:

$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//獲取系統(tǒng)中的常量
$Think.APP_PATH等同于上面的方式
15.在模板當中使用注釋
{/*

    我是模板注釋kwgwgwgfdfdskfskdddsdffdfadfsdfddd

*/}
16.在視圖中使用原生插入原生代碼

在視圖中可以使用<?php ?>標簽插入原生代碼,或者使用{php} {/php}標簽對,在當中插入普通的php代碼即可

17.在視圖中遍歷數(shù)組的常用方法
  • volist
{php}
    $empty = '沒有數(shù)據(jù)';//當填充數(shù)據(jù)為空時,替換模板
{/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頁面內(nèi)容

21.使用include方式引用公共部分
{include file="common/footer"/}//將公共部分單獨存放,使用include引入
22.在使用布局的頁面中修改不同的頁面標題
<title>{$title}</title><!---layout----->

$this->assign([
            'title'=>'page1'
]);//在對應(yīng)的controller ->action中分配變量
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容