# 框架基礎知識
[TOC]
## 目錄結構
project 應用部署目錄
2.├─application 應用目錄(可設置)
3.│ ├─common 公共模塊目錄(可更改)
4.│ ├─index 模塊目錄(可更改)
5.│ │ ├─config.php 模塊配置文件
6.│ │ ├─common.php 模塊函數文件
7.│ │ ├─controller 控制器目錄
8.│ │ ├─model 模型目錄
9.│ │ ├─view 視圖目錄
10.│ │ └─ ... 更多類庫目錄
11.│ ├─command.php 命令行工具配置文件
12.│ ├─common.php 應用公共(函數)文件
13.│ ├─config.php 應用(公共)配置文件
14.│ ├─database.php 數據庫配置文件
15.│ ├─tags.php 應用行為擴展定義文件
16.│ └─route.php 路由配置文件
17.├─extend 擴展類庫目錄(可定義)
18.├─public WEB 部署目錄(對外訪問目錄)
19.│ ├─static 靜態資源存放目錄(css,js,image)
20.│ ├─index.php 應用入口文件
21.│ ├─router.php 快速測試文件
22.│ └─.htaccess 用于 apache 的重寫
23.├─runtime 應用的運行時目錄(可寫,可設置)
24.├─vendor 第三方類庫目錄(Composer)
25.├─thinkphp 框架系統目錄
26.│ ├─lang 語言包目錄
27.│ ├─library 框架核心類庫目錄
28.│ │ ├─think Think 類庫包目錄
29.│ │ └─traits 系統 Traits 目錄
30.│ ├─tpl 系統模板目錄
31.│ ├─.htaccess 用于 apache 的重寫
32.│ ├─.travis.yml CI 定義文件
33.│ ├─base.php 基礎定義文件
34.│ ├─composer.json composer 定義文件
35.│ ├─console.php 控制臺入口文件
36.│ ├─convention.php 慣例配置文件
37.│ ├─helper.php 助手函數文件(可選)
38.│ ├─LICENSE.txt 授權說明文件
39.│ ├─phpunit.xml 單元測試配置文件
40.│ [├─README.md](http://xn--README-2n7cpi.md) README 文件
41.│ └─start.php 框架引導文件
42.├─build.php 自動生成定義文件(參考)
43.├─composer.json composer 定義文件
44.├─LICENSE.txt 授權說明文件
[45.├─README.md](http://45.xn--README-2n7cpi.md) README 文件
46.├─think 命令行入口文件
## 配置文件
在Tinkphp中的配置加載的順序
慣例配置->應用配置->擴展配置->場景配置->模塊配置->動態配置
框架主配文件(慣性配置) thinkphp/convention.php 最頂層
應用公共配置文件 application/config.php application/database.php 對整個應用生效
模塊配置只對當前模塊生效
自定義配置文件 `自定義配置文件需要修改入口文件,代碼如下`
玩轉配置文件只需要記住:`think/Config.php類` 或者 `config`助手函數
配置文件的格式:
```
//正常配置文件
return [
'template' =>[
'layout_on' => true,
'layout_name' => 'layout',
],
];
//自定義配置文件,需要修改入口文件
define('CONF_PATH', __DIR__ . '/../config/');
define('CONF_EXT', '.ini[xml][json]');
//動態配置文件
think\Config::set('peizhi','我是動態配置');
```
配置文件生效的順序:最先加載的會被最后加載的覆蓋掉(`也就是最后加載的生效`),一般我們不會去操作框架主配,而是操作應用和模塊配置文件。
## 函數文件
框架函數文件 thinkphp/helper.php
公共應用函數文件 application/common.php
模塊函數文件 application/模塊目錄/common.php
與配置文件一樣,都不建議去修改主程,而是去修改應用于模塊的函數文件。在那種情況下我們會使用到函數文件呢?比如我們需要去加密我們的密碼,那么就可以把它寫成一個公共的函數方便使用。
函數文件的格式:
```
if(!function_exists('FunMd5'))
{
function FunMd5($password)
{
$str = '我熱愛著我的祖國,我愛中國';
return md5(md5($password).$str);
}
}
```
## 命名空間
PHP5.3加入命名空間,命名空間一個最明確的目的就是解決重名問題,PHP中不允許兩個函數或者類出現相同的名字,否則會產生一個致命的錯誤。這種情況下只要避免命名重復就可以解決,**Thinkphp中的命名空間通常與目錄關聯一起。Tinkphp中的自動加載機制會把類的命名空間做成加載的一部分**。
Thinkphp中命名空間使用:
* [ ] 聲明命名空間 使用namespace關鍵字
* [ ] 引入指定的類 使用use關鍵字 ?命名空間\\類名稱
* [ ] 完全限定式訪問 ?在使用類時,\\完整命名空間\\類名稱(繼承和實例化)
* [ ] 如果一個類沒有命名空間,使用 \\類名
## 隱藏入口文件
ThinkphpURL采用的PATH\_INFO方式 URL訪問的格式:[http://域名/入口文件/模塊名/控制器名稱/操作方法名稱/參數名/參數值](http://xn--eqrt2g/%E5%85%A5%E5%8F%A3%E6%96%87%E4%BB%B6/%E6%A8%A1%E5%9D%97%E5%90%8D/%E6%8E%A7%E5%88%B6%E5%99%A8%E5%90%8D%E7%A7%B0/%E6%93%8D%E4%BD%9C%E6%96%B9%E6%B3%95%E5%90%8D%E7%A7%B0/%E5%8F%82%E6%95%B0%E5%90%8D/%E5%8F%82%E6%95%B0%E5%80%BC)
在ThinkPHP5.0中,出于優化的URL訪問原則,還支持通過URL重寫隱藏入口文件,在對外訪問目錄pulibc/.htaccess,我們可以修改它從而實現隱藏入口文件。注意一點Thinkphp5.0版本已經不再支持傳統的URL訪問模式。
修改后的代碼:
```
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?(實踐上就是在這里加上一個?)/$1 [QSA,PT,L]
</IfModule>
```
重新URL后我們訪問就不在需要入口文件了,那么又有一個問題在我們URL訪問時URL區分大小寫嘛?默認是不區分大小寫的,如有需求可以修改application/config.php里面的配置關閉URL的自動轉換。
關閉URL的自動轉換:
```
'url_convert' => false,
```
## 調試模式
開發時應當開啟調試模式,這樣有利于我們的開發。在5.0.10以前調試模式是自動開始前的,5.0.10+以后需要手動開啟。且注意:調試模式開啟為全局作用,不支持單獨開啟。在application/config.php開啟調試模式
開始調試模式:
```
// 應用調試模式
'app_debug' => true
// trace 調試模式
'app_trace' => true
```
## 設置默認訪問模塊
我們打開URL訪問入口文件,沒有控制器與方法也能正常訪問就是利用了Thinkphp中提供的默認模塊。application/config.php可以修改默認訪問的模塊。
修改默認訪問模塊:
```
// 默認模塊名
'default_module' => 'home',
// 禁止訪問模塊
'deny_module_list' => ['common'],
// 默認控制器名
'default_controller' => 'Index',
// 默認操作名
'default_action' => 'index',
```
## 配置數據庫連接信息
在Thinkphp中數據庫的連接是通過修改配置文件來設置的,在application/database.php修改
```
// 數據庫類型
'type' => 'mysql',
// 服務器地址
'hostname' => '127.0.0.1',
// 數據庫名
'database' => 'my',
// 用戶名
'username' => 'root',
// 密碼
'password' => 'root',
// 端口
'hostport' => '3306',
// 連接dsn
'dsn' => '',
// 數據庫連接參數
'params' => [],
// 數據庫編碼默認采用utf8
'charset' => 'utf8',
// 數據庫表前綴
'prefix' => 'my_',
// 自動寫入時間戳字段
'auto_timestamp' => true,
#如果開啟了時間戳自動寫入,那么數據表中必須添加二個字段:create_time和update_time
如果有表名跟配置項的不一致,thinkphp也為我們提供了一個$table屬性來設置完整表名稱
class User
{
protected $table = '完整的表名稱';
}
```
## 頁面重定向
詳細見手冊:控制器->跳轉與重定向
```
// 成功時跳轉
$this -> success(“提示信息”,“跳轉地址”,“返回數據”,“等待時間”,“header信息”);
// 失敗時跳轉 等待時間默認3s。 跳轉地址可以不寫,默認跳轉回上一頁
$this -> error(“提示信息”,“跳轉地址”,“返回數據”,“等待時間”,“header信息”);
// 重定向跳轉:用于直接跳轉,不顯示提示信息。
$this -> redirect(“跳轉地址”,“請求參數”,“http code”);
```
- 基礎
- 安裝PHP
- 語言基礎
- 變量
- 變量操作
- 超全局數組變量
- 變量作用域
- 變量傳值方式
- 常量
- 數據類型
- 運算符
- 流程控制
- 文件包含
- 錯誤處理
- 字符串操作
- 數組
- 函數
- 進階
- 面向對象
- 提高
- TP
- 安裝項目
- 框架基礎知識
- 命令創建模塊
- URL生命周期
- 路由操作
- Request請求類
- 參數綁定
- 依賴注入
- 模板操作
- 查詢操作
- 添加操作
- laravel
- ☆目錄結構
- CSRF攻擊
- ☆路由
- ☆控制器
- ☆請求類
- ☆視圖
- ☆模板繼承
- ☆表單驗證
- ☆DB類
- ☆模型
- ☆數據庫遷移
- 類型、修飾、索引
- ☆數據填充
- ☆數據分頁
- ☆session處理
- ☆中間件
- ☆緩存操作
- ☆文件上傳
- ☆接口操作
- ☆擴展插件
- restful
- 工作
- 工作記錄
- QQ登錄
- 新浪登錄
- 微信登錄
- sphinx搜索
- 數據庫
- MySQL
- ☆數據庫操作
- ☆數據表操作
- ☆數據的操作
- 待修改
- 優化
- 存儲引擎選擇
- 列表類型選擇
- 范式
- 慢日志查詢
- 精準時間記錄查詢
- 計劃任務 explain
- 索引
- 索與事務
- 查詢緩存
- 存儲過程
- 觸發器
- 分區
- 分表
- sphinx
- 讀寫分離
- 搜索優化
- 網站靜態化
- Memcache
- Mongodb
- Readis
- php使用redis
- 服務器
- Linux
- 目錄結構
- 常用命令
- VIM編輯器
- 用戶與用戶組
- 權限管理
- 運行級別
- 網絡模式
- ssh
- 軟件安裝
- 計劃任務
- Ubuntu
- 編譯PHP7.3
- 編譯MySQL
- 編譯Nginx
- apache虛擬機配置
- 安裝composer
- Nginx
- Git