В Yii 1.1.16 Observer Design Pattern реализован с использованием события & behaivours (события могут быть разделены между всеми компонентами, которые распространяются CComponents). У меня есть следующие модели:наблюдатель шаблон дизайна в Yii 1.1.16, приложив обработчик событий и растущие события
- User.php (смотри ниже)
- Work.php (смотри ниже)
- Activity.php
я хочу выполнить следующее: позволяет говорить в контроллера по умолчанию:
<?php
public function actionExampleWork()
{
$work = new Work();
$work->description = 'some random description';
$work->created_at = new CDbException('NOW()');
$work->user_id = 1;
//$work->attach() INVOKE EVENT that will be handled by all models which listen to this event
$work->save();
}
public function actionExampleUser()
{
$user = new User();
$user->email = '[email protected]';
$user->username = 'example';
$user->password = '123';
//$user->attach(something) invoke Event that should be handled only by Activity model
$user-> save();
}
?>
на самом деле у меня есть пила много примеров Yii делать связанные вещи, но до сих пор никакого успеха на поиск ответа, который подходит это мой потребности :(
- Разве это возможно в Yii?
- Как это реализовать?
- ** Есть ли альтернативы (кроме вызовов метода обработки вручную в действиях контроллера)? **
User.php
<?php class User extends CActiveRecord
{
public function tableName()
{
//@return string the associated database table name
};
public function rules()
{
//@return array validation rules for model attributes.
};
public function relations()
{
return array(
'works' => [self::HAS_MANY, 'Works', 'user_id'],
);
}
public function attributeLabels()
{
//@return array customized attribute labels (name=>label)
}
public function search()
{
//@return CActiveDataProvider the data provider that can return the models
// based on the search/filter conditions.
}
public function updateLastActivity($user_id, $activity_type){
$user = $user->model()->findByPk($user_id);//find user
$user->activity_type = $activity_type;
$user->last_action = new CDbExpression('NOW()');//update DB column
$user->save; //save user
}
} ?>
Work.php
<?php
class Work extends CActiveRecord
{
public function tableName()
{
//@return string the associated database table name
}
public function rules()
{
//@return array validation rules for model attributes.
}
public function relations()
{
return array(
'user' => [self::BELONGS_TO, 'User', 'user_id'],
);
}
public function attributeLabels()
{
//@return array customized attribute labels (name=>label)
}
public function search()
{
//@return CActiveDataProvider the data provider that can return the models
// based on the search/filter conditions.
}
?>
это должно помочь вам HTTP: // www.yiiframework.com/wiki/44/behaviors-events –