2017-02-28 42 views
0

繼承我不知道是否有另一種方式來獲得這樣的:Yii2:示範規則對行爲

UserModel.php

public function behaviors() 
    { 
     //I use array_merge() because UserModel extends from another custom model. 
     return 
      array_merge(
       parent::behaviors(), 
       [ 
        MyBehavior::className(), 
       ] 
      ); 
    } 

public function rules() 
    { 
     return 
      array_merge(
       MyBehavior::theRules(), 
       [ 
        list of UserModel rules... 
       ] 
      ); 

MyBehavior.php

class MyBehavior extends Behavior 
{ 

public static function theRules() 
    { 
    return [ 
      [['attr'],'file'] 
]; 
    } 
    .... 
} 

我的問題是:是否有任何其他方式繼承從MyBehavior規則UserModel沒有使用靜態調用UserModel :: rules()上的MyBehavior :: theRules()?

+1

你有沒有看到有關如何安裝和使用HTTP行爲的文檔://www.yiiframework。 COM/DOC-2.0 /引導概念-behaviors.html? –

+0

是@igor,謝謝! – nacesprin

回答

1

UserModel.php

use yii\helpers\ArrayHelper; 

public function behaviors() 
    { 
     //I use array_merge() because UserModel extends from another custom model. 
     return ArrayHelper::merge(
       parent::behaviors(), 
       [ 
        MyBehavior::className(), 
       ] 
      ); 
    } 

public function rules() 
    { 
     return 
       [ 
        list of UserModel rules... 
       ] 
      ; 
} 

摘自:https://github.com/yiisoft/yii2/issues/3772#issuecomment-45715176

MyBehavior.php

use \yii\validators\Validator; 
public function attach($owner){ 
     parent::attach($owner); 

     $owner->validators[] = Validator::createValidator('file', $this->owner, '_anexo' 
      ,['skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg', 'maxFiles' => 5, 'maxSize'=>2000000] 
     ); 
    }