## 参数传入
通过操作方法的参数绑定功能,可以实现自动获取URL的参数,仍然以上面的控制器为例,控制器代码如下:
~~~
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return 'index';
}
public function hello($name = 'World')
{
return 'Hello,' . $name . '!';
}
}
~~~
当我们访问
~~~
http://tp5.com/index.php/index/index/hello
~~~
就是访问`app\index\controller\Index`控制器类的`hello`方法,因为没有传入任何参数,`name`参数就使用默认值`World`。如果传入name参数,则使用:
~~~
http://tp5.com/index.php/index/index/hello/name/thinkphp
~~~
页面输出结果为:
~~~
Hello,thinkphp!
~~~
现在给hello方法增加第二个参数:
~~~
public function hello($name = 'World', $city = '')
{
return 'Hello,' . $name . '! You come from ' . $city . '.';
}
~~~
访问地址为
~~~
http://tp5.com/index.php/index/index/hello/name/thinkphp/city/shanghai
~~~
页面输出结果为:
~~~
Hello,thinkphp! You come from shanghai.
~~~
可以看到,`hello`方法会自动获取URL地址中的同名参数值作为方法的参数值,而且这个参数的传入顺序不受URL参数顺序的影响,例如下面的URL地址输出的结果和上面是一样的:
~~~
http://tp5.com/index.php/index/index/hello/city/shanghai/name/thinkphp
~~~
或者使用
~~~
http://tp5.com/index.php/index/index/hello?city=shanghai&name=thinkphp
~~~
还可以进一步对URL地址做简化,前提就是我们必须明确参数的顺序代表的变量,我们更改下URL参数的获取方式,把应用配置文件中的`url_param_type`参数的值修改如下:
~~~
// 按照参数顺序获取
'url_param_type' => 1,
~~~
现在,URL的参数传值方式就变成了严格按照操作方法的变量定义顺序来传值了,也就是说我们必须使用下面的URL地址访问才能正确传入`name`和`city`参数到`hello`方法:
~~~
http://tp5.com/index.php/index/index/hello/thinkphp/shanghai
~~~
页面输出结果为:
~~~
Hello,thinkphp! You come from shanghai.
~~~
如果改变参数顺序为
~~~
http://tp5.com/index.php/index/index/hello/shanghai/thinkphp
~~~
页面输出结果为:
~~~
Hello,shanghai! You come from thinkphp.
~~~
显然不是我们预期的结果。
同样,我们试图通过
~~~
http://tp5.com/index.php/index/index/hello/name/thinkphp/city/shanghai
~~~
访问也不会得到正确的结果。
>[danger]#### 注意
>****
>按顺序绑定参数的话,操作方法的参数只能使用URL pathinfo变量,而不能使用get或者post变量。
- 零、序言
- 一、基础
- (1)简介
- (2)安装
- (3)目录结构
- (4)运行环境
- (5)入口文件
- (6)资源访问
- (7)调试模式
- (8)控制器
- (9)视图
- (10)读取数据
- (11)总结
- 二、URL和路由
- (1)URL访问
- (2)参数传入
- (3)隐藏入口
- (4)定义路由
- (5)URL生成
- (6)总结
- 三、请求和响应
- (1)请求对象
- (2)请求信息
- (3)响应对象
- (4)总结
- 四、数据库
- (1)准备
- (2)数据库配置
- (3)原生查询
- (4)查询构造器
- (5)链式操作
- (6)事务支持
- 五、查询语言
- (1)查询表达式
- (2)批量查询
- (3)快捷查询
- (4)视图查询
- (5)闭包查询
- (6)获取值和列
- (7)聚合查询
- (8)时间查询
- (9)字符串查询
- (10)分块查询
- 六、模型和关联
- (1)模型定义
- (2)基础操作
- (3)读取器和修改器
- (4)类型转换和自动完成
- (5)查询范围
- (6)输入和验证
- (7)关联
- (8)模型输出
- 七、视图和模板
- (1)模板输出
- (2)分页输出
- (3)公共模板
- (4)模板定位
- (5)布局模板
- (6)标签定制
- (7)输出替换
- (8)渲染内容
- (9)助手函数
- 八、调试和日志
- (1)第一式:未雨绸缪——页面Trace
- (2)第二式:初见端倪——异常页面
- (3)第三式:拨云见日——断点调试
- (4)第四式:欲穷千里——日志分析
- (5)第五式:运筹帷幄——远程调试
- 九、API开发
- (1)API版本
- (2)异常处理
- (3)RESTFul
- (4)REST调试
- (5)API调试
- (6)安全建议
- 十、命令行工具
- (1)查看指令
- (2)模块生成
- (3)控制器生成
- (4)生成类库映射文件
- (5)生成路由缓存
- (6)生成字段缓存
- (7)指令扩展
- (8)命令行调试
- (9)命令行颜色支持
- (10)命令调用
- 十一、扩展
- (1)函数扩展
- (2)类库扩展
- (3)驱动扩展
- (4)Composer扩展
- 十二、杂项
- Session
- Cookie
- 验证码
- 文件上传
- 图像处理
- 单元测试
- 番外篇:学习ThinkPHP5的正确姿势
- 概念篇:ThinkPHP5名词解释
- 附录A、常见问题集
- 附录B、3.2和5.0区别
- 附录C、助手函数
- 附录D、5.1你必须努力避免的一些问题