ThinkPHP5
ThinkPHP
是一個免費開源的、快速簡單的、面向對象的、輕量級PHP
開發框架。php
爲何選擇ThinkPHP5
?css
ThinkPHP5
採用了全新的架構思想;composer
方式安裝;API
進行了大量的優化更符合了現代web
開發的方式;MVC
定義:MVC
全名Model-View-Controller
,是模型、視圖、控制器的縮寫,是一種軟件設計典範,而不是一種設計模式。其特色:html
開發環境:PHP
>= 5.4.0Mysql
Apache/Nginx
git
Mysql
默認端口號3306
,Apache/Nginx
默認端口號80
github
三種安裝方法:web
github
上下載think
, framework
composer
下載thinkphp
官網下載composer
簡介composer
是php
的一個依賴管理工具
文檔:http://docs.phpcomposer.com/
安裝:sql
curl -sS https://getcomposer.org/installer | php #下載composer安裝工具 sudo mv composer.phar /usr/local/bin/composer #將下載下來的composer.phar移動到系統的PATH目錄,這樣全局可以進行訪問。
composer
安裝TP5
composer create-project --prefer-dist topthink/think proj_name
thinkphp
Apache
設置根目錄數據庫
/Applications/XAMPP/etc/httpd.conf
文件爲Apache
的核心配置文件,打開後從新設置DocumentRoot
的值,DocumentRoot
爲web
的根目錄,而後重啓Apache
服務器便可。json
TP5
目錄講解
tp5 |-application #應用目錄 |-index |-controller #控制器 |-view #視圖 |-model #模型 |-command.php #控制檯的配置文件 |-common.php #項目全局的公共文件 |-config.php #應用的配置文件 |-database.php #數據庫配置文件 |-route.php #路由文件 |-tag.php #應用行爲擴展文件 |-extend #擴展類庫目錄 |-public #網站對外訪問目錄 |-index.php #應用入口文件,全部的請求都是經過index.php以後進行轉發 |-robots.text #定義哪些文件能被搜索引擎爬取,哪些不能 |-router.php #框架快速啓動的配置文件 |-static #存放網站的靜態資源,如css,html,image等 |-runtime #運行時目錄,包含項目運行時的緩存文件、編譯文件、日誌等 |-thinkphp #框架核心目錄 |-lang #語言包目錄 |-library #框架核心類庫目錄 |-tpl #系統模版文件 |-base.php #框架基礎文件,經常使用於定義一些常量 |-composer.json #composer定義文件 |-console.php #控制檯入口文件 |-convention.php #慣例配置文件 |-helper.php #助手函數文件 |-phpunit.xml #單元測試配置文件 |-README.md #README文件 |-start.php #框架引導文件 |-vendor #第三方類庫目錄 |-bulid.php #自動生成定義文件 |-composer.json #composer定義文件 |-LICENSE.text #受權說明文件 |-README.md #README文件 |-think #命令行工具入口
開發規範:
__
開頭的方法屬於魔術方法+
下劃線的命名方式 不能如下劃線開頭app
(能夠配置)ThinkPHP5
模塊設計5.0
版本對模塊的功能作了靈活設計,默認採用多模塊的架構,而且支持單一模塊設計,全部模塊的命名空間均以app
做爲根命名空間(可配置更改,通常不進行更改)。
注意:application
目錄下建立的common
文件夾,common
會默認做爲公共模塊,裏面的文件,不能經過url直接訪問
設置命名空間:namespace app\index\controller
;
設置別名:use app\common\controller\Index as commonIndex
;
ThinkPHP5
配置
ThinkPHP
框架下的默認配置,在think/convention.php
文件中,通常不進行修改。應用配置
應用配置文件是應用初始化的時候首先加載的公共配置文件,默認位於application/config.php
,做用域爲整個應用項目。能夠在入口文件public/index.php
中定義CONF_PATH
,而後新建文件夾,達到將應用配置放到該文件的目的,這樣方便將配置進行統一管理。
在config
目錄下建立config.php
,添加應用配置或者對慣例配置進行修改(須要更改慣例配置時,通常不在原文件中直接更改,能夠在建立的config.php
中進行更改)
在config
目錄下建立database.php
,在裏面配置數據庫鏈接
//定義配置文件目錄 define('CONF_PATH', __DIR__ . '/../application/config/');
config
目錄下添加名爲extra
的文件夾,而後添加配置文件,將會以數組形式做爲元素添加到應用配置下。home.php
:家庭辦公環境的配置項office.php
:公司辦公環境的配置項application/模塊名/config.php
,能夠在和application
同級目錄下建立文件路徑config/index/config.php
,而後在public/index.php
中定義CONF_PATH
爲該路徑,這種狀況也分爲應用配置config/config.php
和模塊配置config/index/config.php
,但會忽略application
路徑下的配置。動態配置
在具體的控制器或者方法裏面進行動態配置,動態配置只在當前的控制器或者當前的方法中有效。好比在Index.php
下設置以下代碼,就能夠爲Index
控制器動態的添加或修改配置。
public function __construct() { config('before', 'beforeAction'); Config::set('before', 'beforeAction'); //功能同上,動態配置 }
Config
類下的方法
目錄:thinkphp/library/think/Config.php
range($range)
:設定配置參數的做用域parse($config, $type = '', $name = '', $range = '')
:解析配置文件或內容load($file, $name = '', $range = '')
:加載配置文件(PHP格式)has($name, $range = '')
:檢測配置是否存在get($name = null, $range = '')
:獲取配置參數 爲空則獲取全部配置set($name, $value = null, $range = '')
:設置配置參數 name
爲數組則爲批量設置reset($range = '')
:重置配置參數
環境變量配置和使用
隱藏入口文件
public/.htaccess裏面: # 將請求轉發到index.php以後 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
入口文件綁定
public/index.php中添加: define('BIND_MODULE', 'admin'); #綁定模塊爲admin,只能訪問admin模塊下的全部文件 define('BIND_MODULE', 'admin/Index'); #綁定的模塊爲admin下的Index控制器,只能訪問Index控制器下的全部方法
能夠在public
目錄下添加文件api.php
,而後在文件下定義應用目錄、加載框架引導文件等..,而後進行模塊綁定,這樣能夠實現經過訪問api.php
下的模塊實現讓用戶只能訪問具體模塊api
下的文件,這樣一個項目中能夠進行多種開發(API
開發等)。
應用配置中:auto_bind_module
:自動綁定模塊
其值設置爲true
以後
入口文件api.php
會自動綁定爲api
模塊
但入口文件index.php
不會自動綁定爲index
模塊
路由
將請求地址url
和具體控制器中的具體方法綁定,經過路由來轉發使其對應。
在conf/config.php
中添加(也能夠不添加,系統默認開啓路由):
'url_route_on' => true
在index/Index
控制器下有方法:
public function info($id = '') { return "{$id}"; }
而後在config/route.php
中添加:
return [ //設置路由 'info/:id' => 'index/Index/info' ];
這樣就實現了經過訪問localhost/info/5
能夠訪問localhost/index/Index/info/5
。
請求對象Request
ThinkPHP
是一個單入口框架,全部的請求都經過index.php
,能夠經過index.php
來接收全部的http
請求,請求中的全部參數均可以經過Request
對象來接收。
獲取Request
對象的三種方式:
public function index() { //獲取方式一:經過助手函數request() $request = request(); //獲取方式二:經過Request對象實例 $request = Request::instance(); } //獲取方式三:經過注入對象的方式(經常使用) public function index(Request $request) { dump($request); }
Request
中經常使用方法:
#注意:Requset中全部的方法都在thinkphp/think/Request.php文件中,可查閱 public function index(Request $request) { #url信息 dump($request->domain()); #域名 dump($request->pathinfo()); #url的pathinfo信息(含URL後綴) dump($request->path()); #url的pathinfo信息(不含URL後綴) dump($request->url()); #url #請求方式 GET、POST dump($request->method()); #請求方式 dump($request->isGet()); #是否爲GET請求 dump($request->isPost()); #是否爲POST請求 dump($request->isAjax()); #是否爲AJAX請求 #請求參數 dump($request->get()); #獲取全部參數的數組 dump($request->param()); #獲取全部參數的數組(包含get、post、pathinfo等) dump($request->get('name')); #獲取name參數的值 dump($request->get('age')); #獲取age參數的值 dump($request->param('name')); #獲取name參數的值 dump($request->param('age')); #獲取age參數的值 #獲取模型 控制器 操做 dump($request->module()); #當前模塊 dump($request->controller()); #當前控制器 dump($request->action()); #當前方法 }
input
助手函數
/* * function input($key = '', $default = null, $filter = ...) * $key:表示傳入參數 * $default:參數默認值 * $filter:參數過濾函數 * 獲取輸入數據 支持默認值和過濾 * * 其中$key支持'.'語法,支持以下: * ['get', 'post', 'put', 'patch', 'delete', 'route', 'param', 'request', 'session', 'cookie', 'server', 'env', 'path', 'file'] * */ public function index(Request $request) { $res_get = $request->get('name'); $res_param_get = $request->param('name'); $res_input_get = input('get.name'); #功能同上,獲取get請求中參數name對應的數據 $res_input_get1 = input('get.name', '張三'); #若是參數name對應的數據爲null,設置默認值 $res_post = $request->post('name'); $res_param_get = $request->param('name'); $res_input_post = input('post.name'); #功能同上,獲取post請求中參數name對應的數據 }
響應對象Response
http對每一個請求都有相應的響應。 public function getUserInfo() { //動態配置返回數據類型 //config('default_return_type', 'json'); Config::set('default_return_type', 'json'); //功能同上 $res = [ 'code' => 200, 'body' => [ 'name' => '張三', 'age' => 22, 'sex' => '男' ], 'msg' => '請求成功' ]; return $res; }