thinkphp5.1 行为 中间件在行为中的执行位置 整理

浏览:1541 发布日期:2018/09/29 分类:ThinkPHP5专区 关键字: thinkphp5.1 行为 中间件
行为:不知道怎么解释,我把它比作是一个流程;
应用流程:'app_init'【应用初始化】-->'app_begin'【应用开始】-->'module_init'【模块初始化】--->[中间件执行【前置中间件】]--->'action_begin'【操作开始执行】--->['view_filter'【视图内容过滤】 | 'log_write'【日志写入】]-->[中间件执行【后置中间件】]--->'app_end'【应用结束】
先记住这个流程,是我自己理解的,[]:可选;【】:文字说明

应用走到那个步骤就执行那个步骤的行为类文件或者中间件文件

行为文件的定义:<?php
/**
 * Created by ahai
 * Time: 2018/9/29 0029 上午 9:30
 * Email: <764882431@qq.com>
 */

namespace app\admin\behavior;

use think\Request;

class Test
{
    //引入jump类
    //use \traits\controller\Jump;
    //行为入口执行方法,
    public function run(Request $request, $params)
    {
        //sleep(1);
        // 行为逻辑
        echo "<br/>";
        //echo $request->path();

        //echo "<br/>";
        //echo $params;
        //echo "<br/>";
        echo "test行为:";echo microtime();
        echo "<br/>";
       // return $this->redirect("\login");
    }
}
行为入口方法run();-->就是入口执行方法
这个名称可以修改

行为的入口方法名称支持自定义,如果需要更改在应用公共文件中添加下面的代码即可:
Hook::portal('portal');
入口方法名称就变成了portal。

这样一个行为文件就创建好了,接下来就是怎么让它实现的操作;

在应用目录下面或者模块的目录下面定义tags.php文件来统一定义行为:<?php

//行为中有多个类时,执行顺序:从上到下
// 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'=> [
        'app\\admin\\behavior\\Test',
        'app\\admin\\behavior\\Check'
    ],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [

    ],
    // 操作开始执行 【前置中间件在这个之前】
    'action_begin' => [

    ],
    // 视图内容过滤
    'view_filter'  => [

    ],
    // 日志写入
    'log_write'    => [

    ],
    // 应用结束【后置中间件在这个之前】
    'app_end'      => [
        'app\\admin\\behavior\\Check'
    ],
];
这样就可以了,当应用走到那个位置就执行那个行为
根据官方说明,当行为中某个行为返回false时,后续行为不再执行,但是应用仍然继续执行,也就是说行为中出错只是不执行行为文件,应用继续执行

其他的整理说明:
下面这个行为例子,就是在同一个行为文件中写了不同的行为【这样理解同一个文件,写了两个不同的行为,而且只能在对应的行为上才执行对应的操作】
例子说明:在tags.php中加入了appInit,appEnd中加入这个行为文件
当执行了appInit 时就执行这个文件的appInit()方法,执行到appEnd时就执行appEnd()方法namespace app\index\behavior;

class Test 
{
    public function appInit($params)
    {

    }
    
    public function appEnd($params)
    {

    }    
}
行为的监听、执行:public function index()
    {
        echo "<br/>监听行为:Hook::Listen监听之前记得要先把行为注册,可以在tags.php中主册,也可以使用Hook::add()注册-----------------";
        $params = 'ahai';
        \Hook::add('app_init',['app\\admin\\behavior\\Check','app\\admin\\behavior\\Test']);
        \Hook::listen('app_init',$params);
       
        echo "<br/>直接执行行为文件【不管有没有注册,我就是执行行为文件】:-----------------";
        \Hook::exec('app\\admin\\behavior\\Test',$params);

        //return $this->fetch();
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>