tp5之行為監聽、鈎子行為的綁定與偵聽


在應用或模塊下建 behavior目錄,目錄內新建行為類文件 Test.php(以下以home模塊為例)

namespace app\home\behavior;//注意應用或模塊的不同命名空間
class Test {
    public function run(&$params){
        echo $params;
    }
}

方法一
1.在入口文件中,增加: define('APP_HOOK',true);
2.home模塊下建tags.php文件定義行為

return [
    'app_init'=> [
        'app\\home\\behavior\\Test', //注意行為的命名空間(下同)
    ],
    'zzzzz'=> [//自定義標簽位
        'app\\home\\behavior\\Test',
    ],
];

3.控制器方法內需要的地方偵聽行為

\think\Hook::listen('app_init',$params);//參數為變量(下同)
\think\Hook::listen('zzzzz',$params);//自定義

方法二
1.home模塊的公共文件(common.php)或控制器方法內綁定行為到標簽位

\think\Hook::add('app_init','app\\home\\behavior\\Test');
\think\Hook::add('zzzz','app\\home\\behavior\\Test');//自定義

2.控制器方法內需要的地方偵聽行為

\think\Hook::listen('app_init',$params);
\think\Hook::listen('zzzzz',$params);//自定義

 方法三
在控制器方法內需要的地方直接執行行為

\think\Hook::exec('app\\home\\behavior\\Test','run',$params);

方法四
在控制器方法內直接使用閉包函數

$a='閉包函數';
\think\Hook::add('zzzz',function($a){ var_dump($a);});
\think\Hook::listen('zzzz',$a);

方法五
行為類綁定到多個標簽
1.Test.php定義如下:

namespace app\home\behavior;
class Test {
    public function app_init(&$params){
        echo 'app_init';
    }
    public function app_end(&$params){
        echo 'app_end';
    }
}

2.home模塊的公共文件(common.php)或控制器方法內綁定行為到標簽位

\think\Hook::add('app_init','app\\home\\behavior\\Test');
\think\Hook::add('app_end','app\\home\\behavior\\Test');

3.控制器方法內需要的地方偵聽行為

\think\Hook::listen('app_init',$params);
\think\Hook::listen('app_end',$params)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM