2018-12-05 11:31:23 2082次浏览 1条回答 0 悬赏 10 金钱

比如我在 common/models 这个目录下有个 Operation 模型,然后在 backend/models/form 目录下有adFormbannerForm继承了 Operation,其中 adbanner 共有的属性都放在 Operation,也就是rulesattributeLabels 里面,adFormbannerForm 只是放他们各自有的属性,可是发现使用adForm 没法把 Operation 中的 rules 属性继承过来,好像是 adForm 里面的 rules 会覆盖掉Operation,而不是对 rules 进行追加,要怎么弄,才能是的两个文档的 rule 都拼起来,不用把Operation 里面的共有属性 rules 要重复写?

最佳答案

  • drodata 发布于 2018-12-05 12:19 举报

    rules() 和 attributeLabels() 返回的都是数组,在子类内调用 parent::rules()parent::attributeLabels() 可获取,之后自行组装即可,下面是自定义 attributeLabels() 的例子:

    // adForm.php
    
    use yii\helpers\ArrayHelper;
    
    public function attributeLabels()
    {
        // parent::attributeLabels() 内含有 Operation 内的属性标签
        return ArrayHelper::merge(parent::attributeLabels(), [
            // 这里放置 adForm 内的属性标签
            'status' => '状态',
        ]);
    }
    
    3 条回复
    回复于 2018-12-05 14:18 回复

    那再问下adForm模型里面的beforeSave这个函数,能不能同样的方法继承Operation的beforeSave?

    回复于 2018-12-05 15:47 回复

    类似的,parent::beforeSave()就行。
    顺便说一下哥们,你提的问题明显不是框架的问题,而是你的php面向对象的继承关系还不清楚,建议你趁机复习下PHP的基础,面向对象部分。

    回复于 2018-12-05 16:04 回复

    好的,谢谢你的建议,我刚接触PHP三个月的时间,很多都是一头雾水哈

    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
clao
见习主管

clao

注册时间:2018-08-03
最后登录:2022-01-25
在线时长:9小时19分
  • 粉丝1
  • 金钱80
  • 威望20
  • 积分370

热门问题