一个典型的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访问的效果是:
![计算器](http://box.kancloud.cn/2015-05-18_555938820f87f.png)
然后我就 按手册上写的,先命令行进入cal项目入口。
然后。。。
![错误1](http://box.kancloud.cn/2015-05-18_5559390fe0a9e.png)
![错误2](http://box.kancloud.cn/2015-05-18_5559394a727f4.png)
![正确](http://box.kancloud.cn/2015-05-18_5559397867122.png)
直到我把 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
- 附录