thinkphp 5.1 url、控制器和模版渲染

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();
    }
}

posted on 2021-01-27 16:50  佟言无忌  阅读(273)  评论(0编辑  收藏  举报