THINKPHP5是一個很好的PHP框架,簡稱TP5,如果你會PHP,可以很容易的掌握這個框架,針對于想要學習tp5的同學,我們簡單對TP5的安裝和配置,及文件結構做一下介紹。 安裝配置官網下載TP5完整版(初學者學習用的) 目錄介紹一般開發(fā)中,代碼都是寫在application這個文件夾中 開發(fā)一個項目的時候,通常分為前臺和后臺,前臺一般放在index模塊中,后臺一般放在admin模塊中。 也可以自己新建一個模塊 模塊內部,都遵循著MVC架構 controller、model、view都可以自己在模塊中創(chuàng)建 下面對application文件夾中的文件做一些介紹; image.png command.php 命令行啟動TP5框架需要讀取的文件 下載的第三方庫都放在這里 入口文件 static 這里放的是css、html之類的靜態(tài)文件 開發(fā)規(guī)范(命名規(guī)范)目錄 只是小寫字母和下劃線構成 模塊設計自己創(chuàng)建的common模塊 可以自己創(chuàng)建common模塊,然后里面寫一些其他模塊會常用的控制器,或者其他模塊依賴的控制器,讓他們繼承。 image.png 慣例配置與應用配置與擴展配置所謂應用位置,就是對app文件夾中文件都起作用的配置。 定義配置文件路徑 創(chuàng)建了配置文件后,必須要在入口文件出定義配置文件的路徑,并且要將配置文件命名為config.php才可以。 image.png 如果項目比較大,配置信息也就多,放在一個配置文件中不合適,所以就有了擴展配置。優(yōu)先級是擴展配置會覆蓋conf/config.php配置,會覆蓋TP5慣例配置。另外,擴展配置文件夾必須叫做extra文件夾,同時TP5為了人性化,允許與conf/config.php同級創(chuàng)建database.php,但是,這個database.php是屬于extra擴展配置的,擁有擴展配置的優(yōu)先級覆蓋。 場景切換配置在慣例配置中,有'app_statues'參數(shù),默認為空,但是可以在應用配置conf/config.php中設置該參數(shù)的值為場景名稱,然后再創(chuàng)建該場景名稱的配置文件,在里面寫入想配置的參數(shù)就可以了。只要想切換場景,就修改conf/config.php這個應用配置文件中'app_status'的值即可。 慣例配置參數(shù)展示 在conf/config.php中,只要調整'app_status'的值為home,那么就會調用conf/home.php中的配置。 應用配置實例 不過,由于TP5的BUG,必須要在conf/home.php中將完整的database.php中的代碼復制過來,否則,修改完一處參數(shù)后,整個應用配置只有修改后的這個參數(shù),原來的database.php中的其他參數(shù)就默認沒有了。 以上內容的配置,都是對整個應用起作用的,針對模塊的單獨的配置,下面會有。 模塊配置與動態(tài)配置模塊配置 只要像上方那樣做修改就可以了。 而動態(tài)配置,指的就是在控制器中進行配置,或者在控制器的方法中進行配置。說的再直白點,就是在類中用構造方法配合config()函數(shù)進行配置,這種配置,對整個類都有作用。若想對指定方法配置,那么就在那個方法中用config()函數(shù)進行配置就可以了。 image.png 我上面只是在方法中沒有輸出config()配置罷了,不然只要訪問方法,就可以看到。 環(huán)境配置環(huán)境配置結合場景配置,先在根目錄創(chuàng)建.env文件,然后在應用配置的config文件中利用 think\Env 這個類中的 Env::get()函數(shù)獲取.env文件中的值,來對場景進行選擇。這樣就不用修改場景,只需要修改.env中的配置的值就可以了。 綁定入口文件綁定入口文件之后,就可以直接加控制器和方法來訪問了,如果綁定了控制器,那么只要輸入方法就可以了。 綁定入口文件 通常用于接口使用,比如讓第三方接入的時候,不希望第三方訪問我們的index模塊或者admin模塊,那么就用這個綁定入口文件來解決。 另外,一旦進行了入口文件的綁定,比如我上面綁定了index,那么我也無法訪問admin模塊下的頁面了。只能訪問index模塊中的頁面 api的應用 路由若要使用路由,那么首先要開啟路由,在convention.php文件中默認開啟路由。 開啟路由 一旦設置好路由的規(guī)則后并且開啟了url_route_must=true,那么訪問原來的index/Index/info/id/5就會報錯,只能訪問news/5。所以,要想原來訪問的地址也能訪問,就將url_route_must=false info方法需要傳入形參id 這里輸出的是news/10,因為這里之前定義了index/index/info的路由為news/:id,如果沒有定義過,那么輸出就是原來的路徑,而不是路由的路徑 路由助手函數(shù)的輸出 請求對象的獲取重點是Request類的使用,以及里面的方法 實際上,可以仔細參考一下這個框架的編寫風格,感覺能學到不少編程思想。 其他獲取的一些內容 上面的param方法,會返回get,post,pathinfo這幾個的值 image.png 上圖第三個參數(shù),是用來過濾獲取到的值的,之所以是用intval,是對獲取到的值進行整數(shù)強制轉換。 推薦自己寫代碼不用助手函數(shù)input,用request類那樣的寫法,這樣代碼的可讀性更高,但是input還是要了解,因為每個人的代碼不同。 控制器中不建議使用die函數(shù),可以用return來結束。 返回對象 上面用到了Config類,但是卻忘記 返回對象一般都是動態(tài)配置,因為不能保證每個控制器的返回對象都相同。 視圖和模板控制器渲染視圖 控制器中,可以使用view()函數(shù)來將與controller同一層的view模塊中的與控制器同名的index文件夾中的與index()方法同名的intex.html渲染出來。這個是一個對應關系。Index控制器對應的是view/index文件夾 只要做到view文件夾路徑后的文件名對應模塊名就可以了,控制器中的view()方法可以指定參數(shù)。 view()對應的路徑就是view文件夾 view('./html/index.html')函數(shù)里面?zhèn)魅脒@樣的參數(shù),代表是從入口文件進去了,而不是像view('index')這樣代表view/index.html view()函數(shù)的參數(shù)不同,路徑也不同 return view('index',['email'=>'123456@qq.com','name'=>'xxx']) 類似這樣的用法,是view()函數(shù)向指定要渲染的html頁面?zhèn)鬏斪兞縠mali和變量name的值。只需要在顯示的位置 渲染變量 要渲染的頁面,只要輸入大寫的STATAC,那么就會被下面這個view函數(shù)的第三個參數(shù)的值所替換,通俗點看就是渲染了常量。 第三個參數(shù),渲染常量STATAC 不過,上面的方法還是不推薦使用,代碼可讀性不高。實際開發(fā)中,最好是繼承think\Controller,然后,使用$this->fetch()來渲染。用法和view()一樣。 推薦使用$this->fethc() 也可以直接使用 $this->assign()的用法 當view文件夾中沒有任何要渲染的模板的時候,就用到了下面這個函數(shù) 傳入兩個參數(shù)的用法 在渲染頁面的時候,TP5框架讓html頁面中用的是花括號來表示變量的,但是,這個也可以在tp5中進行修改,讓其他的符號或者其他的值來代替花括號的作用。 幾種渲染模板時候賦值的方式 賦值方法還挺多的 在配置文件中,可以設置下面這個參數(shù)的值,來全局替換某個關鍵詞為某個值 設置全局值替換 常用的有一些系統(tǒng)默認設置的字符串替換: 這幾個很常用 上面這些修改指定字符串值的方法,最神奇的使用地方就是,假如我們修改了某個文件的位置,那么只要設置指定字符串的值,就可以了,否則還得一個代碼一個代碼的進行修改。 先看看下面能輸出哪些值,然后理解在tp5中,模板是如何獲取這些值的 輸出查看$_SERVER有哪些值 $_SERVER的值 模板獲取$_SERVER中指定的值 獲取其他的值 獲取更多的值 上面這個錯了,是獲取app的路徑,不是當前頁面的路徑 在模板中進行變量計算的時候,可以用#進行占位,之所以要占位,是因為 獲取其他的值 模板中進行變量的計算 還可以同時疊加好幾個函數(shù) 變量遇到js 下面這樣的注釋,更加安全,因為html代碼中看不到。如果用html的注釋,那么就會在前端的網頁源碼中找到 更安全的注釋 模板循環(huán)標簽循環(huán)標簽的使用 在模板中,用 list數(shù)組 offset參數(shù)代表從數(shù)組的幾個元素開始遍歷,length參數(shù)代表遍歷的長度,mod代表對當前循環(huán)次數(shù)取余。 其他參數(shù) foreach迭代 for循環(huán) for在模板中的其他參數(shù) 比較標簽比較標簽,eq和equal相等的 不相等的比較標簽 大于、小于標簽 大于等于、小于等于 image.png 條件判斷標簽Think.get.level這里的level是get傳的參數(shù) image.png 還有notbetween這樣的參數(shù) 幾個常用標簽 上面的 if 標簽內部還可以用AND和OR這樣的邏輯語句 模板的布局包含和繼承當在block中嵌套使用block的時候,就可以向下方這樣使用 {__block__}是使用被繼承薄板中的值 這部分知識,主要就是include,extend,block的靈活運用。 下面可以嘗試做ThinkPHP5開發(fā)的項目來進行實戰(zhàn)了。實戰(zhàn)中再多記錄一些筆記。 |
|