Неустранимая ошибка: вызов функции-члена 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;
}

0

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]