even

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、控制器加载页面

public function index(){
    //指定的是view文件夹下,[action].html,但是如果并非指定,那么就可以进行传参
    return $this->fetch();
    //渲染指定的abc页面
    return $this->fetch('abc');
    //系统内置方法
    return view();
    //use think\View;的前提下
    return call_user_func([new View(), 'fetch']);
}

注意:对于数据的返回,如果需要,可以调整config.php下的'default_return_type' => 'html';默认是html如果需要可以转成json

 2、控制器的初始化方法与钩子

controller里的具体类如果继承了\think\Controller方法后,那么当每个类进行调用的时候会预先执行_initialize这个方法,只要调用这个类里的所有方法,那么这个方法都会初触发。

<?php
namespace app\index\controller;
use think\Controller;

class Index extends Controller
{
    public function _initialize(){
        echo 'this is initialize';
    }

    public function index(){
        return $this->fetch();
    }
}

当类继承了\think\Controller后,就可以调用里面的生命周期函数

<?php
namespace app\index\controller;
use think\Controller;

class Index extends Controller
{
    protected $beforeActionList = [
        'chect',                                    //这个类里的所有方法都适用
        'check' => ['only' => 'index,first'],       //只有指定的两个方法可用
        'check' => ['except' => 'first']            //除了指定的方法,其他可用
    ];

    public function index(){
        return $this->fetch();
    }

    public function first() {
        return 'this is first';
    }

    public function check() {
        echo 'are you ok????';
    }
}

 3、控制器的页面跳转

tp的页面跳转主要分两类,一个是成功跳转,一个是失败跳转,因为页面跳转是基于系统控制器类,所以控制器必需要继承\think\Controller类

 前提需要继承\think\Controller,注意:这里的URL在内部的方法是有通过URL类进行转义的

$this->success(成功的提示, 跳转链接, 数据, 等待时间, header设置)
$this->error(失败的提示, 跳转链接, 数据, 等待时间, header设置)

成功时跳转的页面,失败时跳转的页面的配置在config.php里面

 tp重定向

$this->redirect(链接,参数,http code, 隐式参数)  //注意:这里的链接里面是没有转义的,可以调用URL类进行转义

 空操作,即空的action

 当初恶意输入错误的controller的时候,那么会执行controller类里的默认方法

public function _empty() {
    $this->redirect(url('index/index'));
}

 空控制器,即空的控制器或操作

在对应的controller下面建立Error.php类,那么当遇到空控制器时,系统自动会调用里面的方法,具体代码如下

<?php
namespace app\index\controller;
use think\Controller;

class Error extends Controller{
    public function index() {
        $this->redirect(url('index/index'));
    }
    public function _empty() {
        $this->redirect(url('index/index'));
    }
}

 4、请求和响应

  a、获取url信息

public function index(Request $req){
    //方法一、使用系统方法
    dump(request());
    //方法二、使用系统Request类 使用use think\Request;
    $res = Request::instance();
    dump($res);
    //方法三,引入use think\Request; 指定方法上的一个参数
    dump($req);
}
public function index(){
    //获取域名
    dump(request()->domain());
    //获取当前地址
    dump(request()->url());
    //获取入口文件
    dump(request()->baseFile());
    //获取pathinfo路径,这个会包含后缀
    dump(request()->pathinfo());
    //不会包含后缀
    dump(request()->path());
    //获取后缀
    dump(request()->ext());
}

   b、获取模块信息

public function index(){
    //获取模块信息
    dump(request()->module());
    //获取控制器
    dump(request()->controller());
    //获取方法名
    dump(request()->action());
}

   c、获取请求相关参数或者方法

public function first() {
    //获取ip
    dump(request()->ip());
    dump(input('id'));
    //判断请求方式
   request()->has('id');
request()->isAjax(); request()->isGet(); request()->isPost(); request()->isPut(); request()->isDelete(); //判断请求方式 dump(request()->method()); //获取所有的参数 dump(Request::instance()->param()); //获取字段为id参数 dump(request()->only('id')); //获取除id之外的参数 dump(request()->except('id')); //是否是手机访问 dump(request()->isMobile()); }
public function first() {
    //获取session
    dump(request()->session());
    //获取cookie
    dump(request()->cookie());
    //获取server对象
    dump(request()->server());
    //获取文件
    dump(request()->file());
    //获取头信息
    dump(request()->header());
}
//参数的过滤
Request::instance()->filter(['strip_tags','htmlspecialchars']),

 

public function first() {
    dump(request()->param());
    dump(request()->get(['id' => 88]));     //表求修改
    dump(request()->post(['id' => 789]));
    dump(request()->post('id'));    //表示获取值
    dump(request()->put('id'));
    dump(request()->delete('id'));
}
posted on 2019-09-17 01:11  even_blogs  阅读(207)  评论(0编辑  收藏  举报