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>';