代码之家  ›  专栏  ›  技术社区  ›  Jon Abaca

10月CMS机型-覆盖保存功能

  •  0
  • Jon Abaca  · 技术社区  · 8 年前

    很好的一天,

    我重写了10月份CMS机型的保存功能。

     public function save(Array $options=[])
    

    当我试图保存时,它抛出了一个错误。

    MyCompany\MyPlugin\Models\MyModel::save(array$options=array)的声明应与/a/b/c/d/mysite/plugins/MyCompany/MyPlugin/Models/MyModel.php第42行的10月\Rain\Database\Model::save(array$options=NULL,$sessionKey=NULL)兼容

    所以我修改了save函数。

    public function save(Array $options=[], $sessionKey=null)
    

    然后我得到了这个令人困惑的错误。

    类型错误:传递给MyCompany\MyPlugin\Models\MyModel::save()的参数1必须是在/a/b/c/d/mysite/modules/backend/behaviors/FormController中调用的数组类型,给定为null。php on line 251“on line 38 of/a/b/c/d/mysite/plugins/mycompany/myplugin/models/MyModel.php

    那么,如果在那里传递null,那么考虑到类继承强制参数1为数组,模型如何保存?

    编辑:这里是/a/b/c/d/mysite/modules/backend/behaviors/FormController的第251行。php

    $modelToSave->save(null, $this->formWidget->getSessionKey());
    

    因此,基类将接受null,即使类型暗示需要数组,但在重写函数时,将不再接受null?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Edd    8 年前

    我认为最好的选择是使用模型事件 https://octobercms.com/docs/database/model#events

    public function beforeSave()
    {
        $this->slug = Str::slug($this->name);
    }
    
        2
  •  1
  •   fubar    8 年前

    您的方法签名与原始签名不匹配 October\Rain\Database\Model 方法签名。如果你读了原文 source ,您将看到 $options null .

    这很重要,因为它告诉PHP参数值应该是 array 无效的 . 目前,您的功能需要 大堆 只有

    public function save(array $options = null, $sessionKey = null)
    {
        // ...
    }