TP5學習記錄(Controller篇)

ThinkPHP5

ThinkPHP是一個免費開源的、快速簡單的、面向對象的、輕量級PHP開發框架。php

爲何選擇ThinkPHP5css

  • ThinkPHP5採用了全新的架構思想;
  • 優化了核心是一個顛覆性的版本;
  • 支持composer方式安裝;
  • API進行了大量的優化更符合了現代web開發的方式;

MVC定義:
MVC全名Model-View-Controller,是模型、視圖、控制器的縮寫,是一種軟件設計典範,而不是一種設計模式。其特色:html

  • 耦合性低
  • 重用行高
  • 可維護性高
  • 有利於軟件的工程化

開發環境:
PHP >= 5.4.0
Mysql
Apache/Nginxgit

Mysql默認端口號3306Apache/Nginx默認端口號80github

三種安裝方法:web

  • github上下載think, framework
  • composer下載
  • thinkphp官網下載

composer簡介
composerphp的一個依賴管理工具
文檔: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_namethinkphp

Apache設置根目錄數據庫

/Applications/XAMPP/etc/httpd.conf文件爲Apache的核心配置文件,打開後從新設置DocumentRoot的值,DocumentRootweb的根目錄,而後重啓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 = ''):重置配置參數

環境變量配置和使用

  • 入口文件
    單入口文件:應用程序的全部http請求都由某一個文件接受並由這個文件轉發到功能代碼中。ThinkPHP符合這種功能規範,全部的http請求都由public/index.php文件接收並轉發,根據不一樣的參數,轉發到不一樣的控制器調用不一樣的方法,最終實現不一樣的功能。
  • 隱藏入口文件

    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;
}
相關文章
相關標籤/搜索