一個典型的URL訪問規則是(我們以默認的PATHINFO模式為例說明,當然也可以支持普通的URL模式):
~~~
http://serverName/index.php(或者其他應用入口文件)/模塊/控制器/操作/[參數名/參數值...]
~~~
ThinkPHP的應用可以支持切換到命令行訪問,如果切換到命令行模式下面的訪問規則是:
~~~
>php.exe index.php(或其它應用入口文件) 模塊/控制器/操作/[參數名/參數值...]
~~~
解釋下其中的幾個概念:
| 名稱 | 描述 |
|-----|-----|
| 應用 | 基于同一個入口文件訪問的項目我們稱之為一個應用。 |
| 模塊 | 一個應用下面可以包含多個模塊,每個模塊在應用目錄下面都是一個獨立的子目錄。 |
| 控制器 | 每個模塊可以包含多個控制器,一個控制器通常體現為一個控制器類。 |
| 操作 | 每個控制器類可以包含多個操作方法,也可能是綁定的某個操作類,每個操作是URL訪問的最小單元。 |
以上是官方手冊里提到的命令行訪問介紹。
老楊實踐了下,發現有些問題,
首先,看一下我寫的例子:
~~~
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function exec(){
// URL_PATHINFO_DEPR 分割符有bug,
$cals = strstr(__INFO__, '~cals~');
$cals = ltrim($cals, '~cals~');
$has_opt = false;
if(fasle !== stripos($cals, '+')){
$has_opt = true;
}elseif(fasle !== stripos($cals, '-')){
$has_opt = true;
}elseif(fasle !== stripos($cals, '*')){
$has_opt = true;
}elseif(fasle !== stripos($cals, '/')){
$has_opt = true;
}
try {
$result = eval("return $cals ;");
$this->show("'{$cals}' 的計算結果為:{$result}。");
} catch (Exception $e) {
$this->show('公式計算錯誤:'.$cals.'請檢查后重新輸入計算式:');
}
}
}
~~~
我寫了個計算用的方法exec。因為要支持/。我配置里,將URL參數分隔符設為了~
:`'URL_PATHINFO_DEPR'=>'~',`。
然后為了,省略默認模塊名Home,我入口寫了`define('BIND_MODULE','Home');` 常量。
這時候web訪問的效果是:

然后我就 按手冊上寫的,先命令行進入cal項目入口。
然后。。。



直到我把 Home模塊去掉了,才正確。而且,我試過把入口的綁定去除,加上~Home~都不行。
╮(╯▽╰)╭,還是得多嘗試啊,不能盡信書。
Cli 模式方便我們可以做一些系統任務,比如計劃任務啊,本地文件操作之類的。這樣可以方便使用TP的好處,當然調試也是問題呢?,報錯都是亂碼。
- 序
- 前言
- 內容簡介
- 目錄
- 基礎知識
- 起步
- 控制器
- 模型
- 模板
- 命名空間
- 進階知識
- 路由
- 配置
- 緩存
- 權限
- 擴展
- 國際化
- 安全
- 單元測試
- 拿來主義
- 調試方法
- 調試的步驟
- 調試工具
- 顯示trace信息
- 開啟調試和關閉調試的區別
- netbeans+xdebug
- Socketlog
- PHP常見錯誤
- 小黃鴨調試法,每個程序員都要知道的
- 應用場景
- 第三方登錄
- 圖片處理
- 博客
- SAE
- REST實踐
- Cli
- ajax分頁
- barcode條形碼
- excel
- 發郵件
- 漢字轉全拼和首字母,支持帶聲調
- 中文分詞
- 瀏覽器useragent解析
- freelog項目實戰
- 需求分析
- 數據庫設計
- 編碼實踐
- 前端實現
- rest接口
- 文章發布
- 文件上傳
- 視頻播放
- 音樂播放
- 圖片幻燈片展示
- 注冊和登錄
- 個人資料更新
- 第三方登錄的使用
- 后臺
- 微信的開發
- 首頁及個人主頁
- 列表
- 歸檔
- 搜索
- 分頁
- 總結經驗
- 自我提升
- 進行小項目的鍛煉
- 對現有輪子的重構和移植
- 寫技術博客
- 制作視頻教程
- 學習PHP的知識和新特性
- 和同行直接溝通、交流
- 學好英語,走向國際
- 如何參與
- 瀏覽官網和極思維還有看云
- 回答ThinkPHP新手的問題
- 嘗試發現ThinkPHP的bug,告訴官方人員或者push request
- 開發能提高效率的ThinkPHP工具
- 嘗試翻譯官方文檔
- 幫新手入門
- 創造基于ThinkPHP的產品,進行連帶推廣
- 展望未來
- OneThink
- ThinkPHP4
- 附錄