Неустранимая ошибка: вызов функции-члена update() в null

Я устанавливаю плагин в систему управления обучением под названием Ilias. Он установлен правильно, но когда я пытаюсь обновить его, чтобы сделать его активным, выдает эту фатальную ошибку:

"Неустранимая ошибка: вызов функции-члена update() для null в C:\xampp\htdocs\ilias\Services\Component\classes\class.ilObjComponentSettingsGUI.php в строке 520"

Который ссылается на этот кусок кода:

function updatePlugin()
{
    include_once("./Services/Component/classes/class.ilPlugin.php");
    $pl = ilPlugin::getPluginObject($_GET["ctype"], $_GET["cname"],
        $_GET["slot_id"], $_GET["pname"]);

    $result = $pl->update();

    if ($result !== true)
    {
        ilUtil::sendFailure($pl->message, true);
    }
    else
    {
        ilUtil::sendSuccess($pl->message, true);
    }

Упомянутая строка такая:

$result = $pl->update();

И это "включенный" код файла:

    <?php

    abstract class ilPluginConfigGUI

{
    protected $plugin_object = null;

    /**
     * Set plugin object
     *
     * @param   object  plugin object
     */
    final function setPluginObject($a_val)
    {
        $this->plugin_object = $a_val;
    }

    /**
     * Get plugin object
     *
     * @return ilPlugin  object
     */
    public final function getPluginObject()
    {
        return $this->plugin_object;
    }

    /**
     * Execute command
     *
     * @param
     * @return
     */
    function executeCommand()
    {
        global $ilCtrl, $ilTabs, $lng, $tpl;

        $ilCtrl->setParameterByClass("ilobjcomponentsettingsgui", "ctype", $_GET["ctype"]);
        $ilCtrl->setParameterByClass("ilobjcomponentsettingsgui", "cname", $_GET["cname"]);
        $ilCtrl->setParameterByClass("ilobjcomponentsettingsgui", "slot_id", $_GET["slot_id"]);
        $ilCtrl->setParameterByClass("ilobjcomponentsettingsgui", "plugin_id", $_GET["plugin_id"]);
        $ilCtrl->setParameterByClass("ilobjcomponentsettingsgui", "pname", $_GET["pname"]);

        $tpl->setTitle($lng->txt("cmps_plugin").": ".$_GET["pname"]);
        $tpl->setDescription("");

        $ilTabs->clearTargets();

        if($_GET["plugin_id"])
        {
            $ilTabs->setBackTarget(
                $lng->txt("cmps_plugin"),
                $ilCtrl->getLinkTargetByClass("ilobjcomponentsettingsgui", "showPlugin")
            );
        }
        else
        {
            $ilTabs->setBackTarget(
                $lng->txt("cmps_plugins"),
                $ilCtrl->getLinkTargetByClass("ilobjcomponentsettingsgui", "listPlugins")
            );
        }

        $this->performCommand($ilCtrl->getCmd("configure"));

    }

    abstract function performCommand($cmd);
}
?>

Я не понимаю ошибку, поскольку я не изменил код, и все эти файлы были включены в плагин. Я надеюсь, что кто-то может указать на мою ошибку, спасибо!

ОБНОВИТЬ

protected function beforeUpdate()
{
    return true;    // false would indicate that anything went wrong
    // update would not proceed
    // throw an exception in this case
    //throw new ilPluginException($lng->txt(""));
}

/**
 * After update processing
 */
protected function afterUpdate()
{
}

/**
 * Get plugin object.
 *
 * @param   string  $a_ctype    IL_COMP_MODULE | IL_COMP_SERVICE
 * @param   string  $a_cname    component name
 * @param   string  $a_sname    plugin slot name
 * @param   string  $a_pname    plugin name
 */
final static function getPluginObject($a_ctype, $a_cname, $a_slot_id, $a_pname)
{
    global $ilDB;

    include_once("./Services/Component/classes/class.ilPluginSlot.php");
    $slot_name = ilPluginSlot::lookupSlotName($a_ctype, $a_cname, $a_slot_id);

    $cached_component = ilCachedComponentData::getInstance();
    $rec = $cached_component->lookCompId($a_ctype, $a_cname);
    if (! $rec) {
        return NULL;
    } 

1 ответ

Решение

Ваша проблема обозначена следующим пунктом в вашем выводе (см. Комментарии):

$_GET["pname"] --> string(26) "SystemNotifications-master"

Вероятно, выписавшись из GIT-Repo, вы создали папку с именем "SystemNotifications-master". Это не соответствует соглашению об именах, которое должна иметь папка плагина в ILIAS, что, вероятно, в этом случае будет: "Системные уведомления". Он должен соответствовать частям класса плагина php (который, вероятно, похож на плагин ilSystemNotifications).

В любом случае, не меняйте основной код ILIAS. Проблема, конечно, не там, а в вашей файловой системе / базе данных.

Другие вопросы по тегам