thinkphp8中间件与请求对象--php进阶篇

       第一部分,先介绍中间件

        thinkphp8的中间件分4种,分别是全局中间件、应用中间件、路由中间件、控制器中间件。

        基于自动多应用模式分别建立这4种中间件。打开命令行,切换到根目录下。执行以下命令快速建立中间件。

php think make:middleware app\mp_toutiao\middleware\Auth

php think make:middleware app\mp_toutiao\middleware\Check

php think make:middleware app\mp_toutiao\middleware\Hello

php think make:middleware app\mp_toutiao\middleware\World

在Auth.php文件的handle方法写入代码如下
        echo 'Auth中间件,';
        return $next($request);

在Check.php文件的handle方法写入代码如下

        echo 'check中间件,';
        return $next($request);

在Hello.php文件的handle方法写入代码如下

        echo 'hello中间件,';
        return $next($request);

在World.php文件的handle方法写入代码如下

        echo 'world中间件,';
        return $next($request);

        先给Auth,Check,Hello3个中间件改个别名,在config下面的middleware.php中的alias项中添加如下代码

       'alias'    => [
                'auth'  => app\mp_toutiao\middleware\Auth::class,
                'check' => app\mp_toutiao\middleware\Check::class,
                'hello' => app\mp_toutiao\middleware\Hello::class,
            ],

        然后修改app下面的middleware.php,把hello中间件注册为全局中间件

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
    'hello',
];
        然后在app下面的mp_toutiao文件夹下面新增middleware.php,可复制app下面的middleware.php文件,粘贴过来,然后把auth注册为mp_toutiao应用的中间件

<?php
// 应用中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
    'auth',
];

        然后在app下面的mp_toutiao文件夹下面新增route文件夹,在route文件夹里面新建route.php文件,添加如下代码进去,把World中间件类注册为路由中间件,由于没改别名,注意下写法不一样

<?php

use think\facade\Route;

Route::rule('test/:name','index/test')
    ->middleware(\app\mp_toutiao\middleware\World::class);

        然后在app下面的controller文件夹下面的Index.php中,添加如下代码

<?php

namespace app\mp_toutiao\controller;
 

use think\facade\Request;


class Index {
    protected $middleware = ['check'];
    public function index()
    {
        return "自动多应用抖音前台".Request::url(true);
    }
    public function test()
    {
        return "自动多应用抖音前台测试,".request()->param('name');
    }
    
}
        注意到protected $middleware = ['check'];这行,是将check注册为控制器的中间件

        在浏览器输入http://mp.toutiao.am8.com/test/hahaha

        注意到执行顺序没有,全局中间件>应用中间件>路由中间件>控制器中间件

        在浏览器输入http://mp.toutiao.am8.com/index/index

        输出没有路由中间件,执行顺序全局中间件>应用中间件>控制器中间件

        第二部分,请求对象

        请求对象有三种方式使用,分别是依赖注入,静态调用,助手函数

        依赖注入,比如如下写法

use think\Request;

class Index

{

        public function index(Request $request)

        {

                return $request->param('name');

        }

}

        静态调用,比如如下写法

use think\facade\Request;


class Index {
    public function index()
    {
        return Request::url(true);
    }

}

        助手函数,比如如下写法

class Index

{
    public function test()
    {
        return request()->param('name');
    }
    
}

        那么这3种用法有什么区别呢?助手函数是依赖注入的简化版。助手函数和依赖注入都是实例化对象管理请求对象,静态调用是直接使用请求类。就看是否需要使用多个对象了,是否需要一直就占用内存了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值