Страница 1 из 1

[1546] Не срабатывает disableBehaviors

Добавлено: 2010.09.07, 14:05
artist
Здравствуйте!
Столкнулся с такой проблемой

Код: Выделить всё

 
$node->disableBehaviors();
$node->save();
$node->enableBehaviors();
 
Не отключаются поведения.
В одном из поведений есть метод beforeValidate и он не дает сохранится модели, но на данный момент это поведение не нужно, поэтому пытаюсь отключить, но поведение все равно отрабатывает.
В чем может быть проблема?
Yii 1.1.4 версия

Re: Не срабатывает disableBehaviors

Добавлено: 2010.09.07, 20:12
samdark
Тестовый наборчик сочинить сможете? Одна модель, одно поведение с die("hello, I'm behavior!") в beforeValidate.

Re: Не срабатывает disableBehaviors

Добавлено: 2010.09.08, 06:56
artist
Поведение

Код: Выделить всё

class MyBehavior extends CModelBehavior{

    public function  beforeValidate($event) {
        die('hi, i`m behavior');
        return parent::beforeValidate($event);
    }
}
 
Модель

Код: Выделить всё

class ContactForm extends CFormModel
{
    public $name;
    public $email;
    public $subject;
    public $body;
    public $verifyCode;



        public function  behaviors() {
            return array(
                'mybehavior' => array(
                    'class' => 'MyBehavior',
                ),
            );
    }

    public function rules()
    {
        return array(
            // name, email, subject and body are required
            array('name, email, subject, body', 'required'),
            // email has to be a valid email address
            array('email', 'email'),
            // verifyCode needs to be entered correctly
            array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),
        );
    }

    public function attributeLabels()
    {
        return array(
            'verifyCode'=>'Verification Code',
        );
    }
}
 
Деуствие в контроллере SiteController

Код: Выделить всё

    public function actionContact()
    {
        $model=new ContactForm;
        if(isset($_POST['ContactForm']))
        {
            $model->attributes=$_POST['ContactForm'];
                        //$model->disableBehavior('mybehavior'); //also does not work
                       $model->disableBehaviors();   //not working
            if($model->validate())
            {
                $headers="From: {$model->email}\r\nReply-To: {$model->email}";
                mail(Yii::app()->params['adminEmail'],$model->subject,$model->body,$headers);
                Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.');
                $this->refresh();
            }
        }
        $this->render('contact',array('model'=>$model));
    } 

Re: Не срабатывает disableBehaviors

Добавлено: 2010.09.08, 14:32
samdark
Хороший тест. Воспроизвёл, урезал до 4-х файлов. Не прошло. Похоже баг.

Re: [1546] Не срабатывает disableBehaviors

Добавлено: 2010.09.08, 14:56
samdark
Написал юнит-тест, зарепортил: http://code.google.com/p/yii/issues/detail?id=1546

Re: [1546] Не срабатывает disableBehaviors

Добавлено: 2010.09.08, 16:22
artist
:-)))
ага, не сразу допер про юнит тест. стыдно