YII-扩展

1、模块化设计

模块之间相互独立,需要借助命名空间
app\modules\article\Article
article

//main文件
'modules' => [
    'article' => [
        'class' => 'app\modules\article\Article',
    ],
],

//在控制器中获取子模块
$article = \Yii::$app->getModule('article);

//调用子模块的操作
$article->runAction('default/index);

2、事件

on()    绑定事件  
trigger() 触发事件
cat
<?php
namespace Vendor\animal;
use \yii\base\Component;
class Cat extends Component
{
    public function shout()
    {
        echo "my name is cat";
        $this->trigger('miao');
    }
}

Mouse
<?php
namespace Vendor\animal;
use yii\base\Component;
class Mouse extends Component
{
    public function run()
    {
        echo "my name is Mouse";
    }
}

<?php
namespace backend\controllers;
use yii\web\Controller;
use vendor\animal\Cat;
use vendor\animal\Mouse;
class AnimalController extends Controller
{
    public function actionIndex()
    {
        $cat = new Cat;
        $mouse =  new Mouse;
        $cat->on('miao',[$mouse,'run']);//绑定事件
        $cat->shout();
    }
}

注意事件的先后执行顺序

给事件绑定参数

<?php
namespace backend\controllers;
use yii\web\Controller;
use vendor\animal\Cat;
use vendor\animal\Mouse;
class AnimalController extends Controller
{
    public function actionIndex()
    {
        $cat = new Cat;
        $mouse =  new Mouse;
        $cat->on('miao',[$mouse,'run']);//绑定事件
        $cat->shout();
    }
}

<?php
namespace Vendor\animal;
use \yii\base\Component;
use yii\base\Event;

class MyEvent extends Event
{
    public $message;
}

class Cat extends Component
{
    public function shout()
    {
        echo "my name is cat <br>";
//        $this->trigger('miao');
        $me = new MyEvent();
        $me->message = 'helo my event';
        $this->trigger('miao',$me);
    }
}

<?php
namespace Vendor\animal;
use yii\base\Component;

class Mouse extends Component
{
    public function run($e)
    {
        echo "my name is Mouse <br>";
        echo  $e->message;
    }
}

绑定多个事件

<?php
namespace backend\controllers;
use vendor\animal\Dog;
use yii\web\Controller;
use vendor\animal\Cat;
use vendor\animal\Mouse;
class AnimalController extends Controller
{
    public function actionIndex()
    {
        $cat = new Cat;
        $mouse =  new Mouse;
        $cat->on('miao',[$mouse,'run']);//绑定事件
        $dog = new Dog();
        $cat->on('miao',[$dog,'look']);//绑定事件
        $cat->shout();
    }
}

<?php
namespace vendor\animal;
class Dog
{
    public function look()
    {
        echo 'my name is Dog';
    }
}

取消事件绑定

$cat->on('miao',[$dog,'look']);//绑定事件
$cat->off('miao',[$dog,'look']);//取消绑定事件

另一个对象,不会被触发

$cat = new Cat;
$cat2 = new Cat;
$mouse =  new Mouse;
$cat->on('miao',[$mouse,'run']);//绑定事件
$dog = new Dog();
$cat->on('miao',[$dog,'look']);//绑定事件
$cat->off('miao',[$dog,'look']);//取消绑定事件
$cat->shout();
$cat2->shout();

类级别的事件处理器

 Event::on(Cat::className(),'miao',[$mouse,'run']);

匿名函数绑定事件

Event::on(Cat::className(),'miao',function (){
            echo 'miao event has triggered <br>';
        });

应用主体

\Yii::$app->on(\yii\base\Application::EVENT_AFTER_REQUEST,function(){
            echo "event after request";
        });

        echo 'hello index action <br>';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值