Как мне правильно потребовать плагин зависимостей в Moodle 3.5

У меня есть плагин активности, для правильной работы которого требуется другой плагин. Я последовал рекомендации запросить этот плагин как зависимость в файле version.php следующим образом:

$plugin->dependencies = array('local_aws' => 2017071501 ); //AWS php SDK  dependency

Проблема в том, что когда я устанавливаю свой плагин, я получаю предупреждение:

Предупреждение: require_once(/var/www/moodle/local/aws/sdk/aws-autoloader.php): не удалось открыть поток: Нет такого файла или каталога в /var/www/moodle/mod/tutorship/lib.php на строка 37

Неустранимая ошибка: require_once(): Не удалось открыть требуемый '/var/www/moodle/local/aws/sdk/aws-autoloader.php' (include_path='/var/www/moodle/lib/pear:.:/usr/ share/php') в /var/www/moodle/mod/mymodulep/lib.php в строке 37

В строке 37 используется этот код:

// For AWS API Part
require_once($CFG->dirroot . '/local/aws/sdk/aws-autoloader.php');

Поэтому мне кажется, что во время установки моего плагина require_ Once не выполняется, так как плагин AWS еще не установлен. Ну, я последовал рекомендации сделать его зависимостью в version.php, но он не устанавливается до проверки require_ Once?

Как я могу решить эту головоломку?


person Daniel Baker    schedule 14.09.2019    source источник
comment
Я связал плагин со своим и изменил путь к моему плагину не на локальный.   -  person Daniel Baker    schedule 26.09.2019


Ответы (1)


Я думаю, вы правы в своем предположении, что «требование_один раз не выполняется, поскольку плагин AWS еще не установлен». Чтобы избежать такого рода проблем, вы должны стараться не запрашивать файлы других плагинов/библиотек в строках, которые фактически выполняются во время процедур установки/обновления плагина. Нужно ли использовать другой плагин во время установки вашего?

Я бы переместил require_once($CFG->dirroot . '/local/aws/sdk/aws-autoloader.php'); в какой-нибудь файл, который никогда не запускается во время фактической установки/обновления (избегайте заголовка lib.php). Например, я бы создал класс mod/tutorship/classes/some_class.php (правильно «распределив пространство имен» с namespace mod_tutorship;), выполнил бы require_once там, а затем просто создал бы экземпляр класса в моем lib.php внутри функции, которая действительно в нем нуждается.

person Mitxel    schedule 02.10.2019