URL解析模式
http://serverName/index.php/模块/控制器/操作/参数/值...;
如果wamp环境没有开启伪静态,那么ThinkPHP不支持URL重写。
没有开启URL重写,那只能使用PATH_INFO模式,如下:
public/index.php?s=test/abc/eat/who/主人老李;
控制器
// 是否自动转换URL中的控制器和操作名
'url_convert' => true,
// 例子: true:HelloWorld hello_world
// 例子: false:HelloWorld HelloWorld
渲染输出
1、ThinkPHP直接采用方法内return返回的方式直接就输出了。
2、使用json输出,直接采用json函数;
$data = ['a'=>1,'b'=>2,'c'=>3,];
return json($data);
3、使用view输出模版,开启错误提示,可知道如何创建模版;
return view();
4、默认输出方式为html格式输出,如果返回的是数组,则会报错;
5、可以更改配置文件里的默认输出类型,更改为json;
return ['user'=>'Lee','age'=>18];
'default_return_type' => 'json',
6、如果继承了基类控制器,那么可以定义控制器的初始化方法;initialize()
7、initialize()方法会在调用控制器方法之前执行;
protected function initialize(){
// parent::initialize();
echo "init";
}
8、initialize()方法不需要任何返回值,输出用php方式,return无效。
控制器前置操作
1、继承Controller 类后可以设置一个$beforeActionList属性来创建前置方法;
protected $beforeActionList = [
'first',
// one 方法执行不调用second前置
'second'=>['except'=>'one'],
// third 前置只能通过地用用one和two方法触发
'third'=>['only'=>'one,two']
];
protected function first(){
echo "first<br>";
}
跳转和重定向
1、Controller类提供了两个跳转的方法,success(msg,url) 和 error(msg)
public function index (){
if($this->flag){
// 如果不指定url,则返回$_SERVER['HTTP_REFERER']
$this->success('成功','../');
}else{
// 自动返回前一页
$this->error('失败');
}
}
2、成功或错误有一个固定的页面模版:thinkphp/tpl/dispatch_jump.tpl;
3、在app.php配置文件中,可以自定义跳转模版页面
// 默认跳转页面对应的模版文件
'dispatch_success_tmp'=>Env::get('think_path')
空方法和空控制器
1、当访问了一个未定义的方法,系统会报错,我们可以使用_empty()来拦截;
public function _empty($name){
return '不能存在的方法'.$name;
}
2、当访问了一个未定义的控制器,系统也会报错,我们可以使用Error类来拦截;
Class Error {
public function index(Request $q){
return '当前控制器不存在'.$q->controller();
}
}