如何在Yii2中覆盖模型

时间:2017-06-16 07:03:52

标签: php yii2

基本上我有两个模块。

  1. 估计
  2. 金融
  3. 我有一个名为" Repair_Estimate"的表, 所以它将作为模型进行交互。

    但是,我想将它们分成两个基于命名空间的两个模块。

    所以在模特的文件夹中这样:

    models
       - estimator
            -RepairEstimate.php
       - finance
            -RepairEstimate.php
    

    因此,在estimator的模型中,RepairEstimate的定义如下:

    class RepairEstimate extends \yii\db\ActiveRecord{
        public function rules(){
          return [
             //some rules here
            [['inspection_id', 'IDENTITY'], 'required', 'on' => 'pre'],
          ];
        }
    
        public function attributeLabels(){
    
            //some attribte here
            return [
             'id' => 'ID',
            ];
        }
    }
    

    我的问题是,在金融模型中,它定义如下:

    class RepairEstimate extends \app\models\estimator\RepairEstimate
    {
    public function __construct(array $config = [])
    {
        parent::__construct($config);
    }
    
    public function rules()
    {
            // How to add some rule here ?
        return parent::rules(); // TODO: Change the autogenerated stub
    }
    
    
    public function attributeLabels()
    {
        // How to add some attribute here ?
        return parent::attributeLabels(); // TODO: Change the autogenerated stub
    }
    

1 个答案:

答案 0 :(得分:2)

您可以使用PHP array_merge函数:

public function rules()
{

    return array_merge(parent::rules(), [ 
          //your additional rules here
    ]);
}


public function attributeLabels()
{
    return array_merge(parent::attributeLabels(), [
          //your additional attribute labels here
    }
}

或者如果你想改变现有的那些:

$attributes = parent::attributeLabels();
// do something with $attributes array
return $attributes;