Избавляемся от ошибки «modAction support is deprecated» в старых пакетах

Если у вас есть дополнение, которое вы делали ещё на первой версии modExtra, то при его установке сейчас вы будете видеть такое сообщение об ошибке:

modAction support is deprecated since version 2.3.0.
Support for modAction has been replaced with routing based
on a namespace and action name. Please update the extra
with the namespace simpleupdater to the routing based system.

Исправить её не сложно, но раньше всё не доходили руки.

1. Находим файл-контроллер (simpleUpdater/core/components/simpleupdater/index.class.php), меняем в нём название класса на simpleUpdaterIndexManagerController и вносим прямо в него все методы из контроллера home (getPageTitle, loadCustomCssJs и getTemplateFile). Убираем слово abstract.

2. В файле simpleUpdater/_build/data/transport.menu.php меняем action на просто index (до этого там будет массив — array('controller' => 'index')). Удаляем всё, что связано с modAction. В массив для modMenu добавляем параметр namespace.

3. В файле simpleUpdater/_build/build.transport.php находим блок с BUILD_MENU_UPDATE и удаляем из него RELATED_OBJECTS и RELATED_OBJECT_ATTRIBUTES.

После этого меняем номер версии, changelog и собираем новый пакет.

Вот все изменения на одной странице: github.com/ilyautkin/simpleUpdater/commit/9e95decbd61a24025e2576aa1aff68a34469274e

UPD. Если на сайте стояла старая версия и пункт меню уже существовал, то эти действия пункт меню не поменяют. Чтобы при обновлении всё было ок, нужно добавить в папку _build/resolvers/ файл resolve.fixmenu.php:

<?php
if ($object->xpdo) {
	$modx =& $object->xpdo;
	switch ($options[xPDOTransport::PACKAGE_ACTION]) {
		case xPDOTransport::ACTION_INSTALL:
			break;
		case xPDOTransport::ACTION_UPGRADE:
			if ($menu = $modx->getObject('modMenu', [
			        'text' => 'simpleupdater',
				    'namespace' => 'core'
				])) {
				$data = [
					'namespace' => 'simpleupdater',
					'action' => 'index'
				];
				$menu->fromArray($data);
				$menu->save();
			}
			break;
		case xPDOTransport::ACTION_UNINSTALL:
			break;
	}
}
return true;

И добавить новый резолвер в список резолверов (файл _build/build.config.php):

// ...
$BUILD_RESOLVERS = array(
	'tables',
	'chunks',
	'fixmenu', // Новый резолвер
);

Вот эти изменения: github.com/ilyautkin/simpleUpdater/commit/cfad412ba4db0e9707306a25c072ef5babf39a9c
Илья Уткин
25 марта 2019, 11:43
6
616
+13
Поблагодарить автора Отправить деньги

Комментарии: 8

Алексей
27 марта 2019, 18:26
0
Илья, подскажите пожалуйста.
У меня установлен SimpleUpdater
Но когда я в админке нажимаю «Пакеты — Обновление MODX» у меня вылетает 500 ошибка.

В логе:
ERROR in modManagerRequest::prepareResponse @ ...../core/model/modx/modmanagerrequest.class.php : 187) modAction support is deprecated since version 2.3.0. Support for modAction has been replaced with routing based on a namespace and action name. Please update the extra with the namespace simpleupdater to the routing based system.

Также, когда я жму на корзину ресурсов(управление удаленными ресурсами) вылетает «Доступ запрещён».
Из меню исчезла консоль (Console)
Переустановки не помогают =(
Это связанные проблемы?
Началось всё буквально на днях, как я понимаю. Вышло много обновлений. Обновился.
И, к сожалению, поздно заметил. Бэкап уже сильно не свежий будет =(
    Илья Уткин
    29 марта 2019, 08:53
    0
    Не знаю… Я такого не замечал.

    Если найдёшь, в чём причина — отпиши, пожалуйста, постараюсь исправить, если дело в моём дополнении.
      Алексей
      29 марта 2019, 09:25
      0
      SimpleUpdater сам починился, каким-то образом. А проблема с удалением ресурсов и Console была связана с тем, что у админа, почему-то галочка «неограниченные права» в профиле снялась… вроде и рад, что нашёл причину, но теперь паранойя, почему она снялась=)
Wassi Wassinen
28 марта 2019, 23:43
0
Илья, привет. В логах такое:

[2019-03-28 23:40:55] (ERROR in xPDO::getService @ /www/core/xpdo/xpdo.class.php : 1234) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:40:55] (ERROR in modRestCurlClient::__construct @ /core/model/modx/rest/modrestcurlclient.class.php : 26) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:40:55] (ERROR in xPDO::getService @ /core/xpdo/xpdo.class.php : 1234) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:40:55] (ERROR in modRestCurlClient::__construct @ core/model/modx/rest/modrestcurlclient.class.php : 26) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:00] (ERROR in modManagerRequest::prepareResponse @ core/model/modx/modmanagerrequest.class.php : 187) modAction support is deprecated since version 2.3.0. Support for modAction has been replaced with routing based on a namespace and action name. Please update the extra with the namespace autoredirector to the routing based system.
[2019-03-28 23:41:07] (ERROR in xPDO::getService @ /core/xpdo/xpdo.class.php : 1234) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:07] (ERROR in modRestCurlClient::__construct @ /core/model/modx/rest/modrestcurlclient.class.php : 26) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:07] (ERROR in xPDO::getService @ /core/xpdo/xpdo.class.php : 1234) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:07] (ERROR in modRestCurlClient::__construct @ /core/model/modx/rest/modrestcurlclient.class.php : 26) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:18] (ERROR in xPDO::getService @ /core/xpdo/xpdo.class.php : 1234) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:18] (ERROR in modRestCurlClient::__construct @ /core/model/modx/rest/modrestcurlclient.class.php : 26) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:18] (ERROR in xPDO::getService @ /core/xpdo/xpdo.class.php : 1234) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-03-28 23:41:18] (ERROR in modRestCurlClient::__construct @ /core/model/modx/rest/modrestcurlclient.class.php : 26) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
При установке AutoRedirrector такое:
Консоль запущена...
Пробуем установить пакет с подписью: autoredirector-1.0.1-rc
Пакет найден... сейчас идёт подготовка к его установке.
Загрузка рабочего пространства пакета...
Рабочее пространство загружено, сейчас устанавливаем пакет...
Skipping vehicle object of class modMenu (data object exists and cannot be upgraded); criteria: Array ( [text] => autoredirector ) 
Attempting to preserve files at /assets/components/autoredirector into archive /core/packages/autoredirector-1.0.1-rc/modCategory/5acdab8008716224b7db95693c4c1458.0.preserved.zip
PHP notice: A non well formed numeric value encountered
Attempting to preserve files at /core/components/autoredirector into archive /core/packages/autoredirector-1.0.1-rc/modCategory/5acdab8008716224b7db95693c4c1458.1.preserved.zip
PHP notice: A non well formed numeric value encountered
Успешно установлен пакет autoredirector-1.0.1-rc
    Илья Уткин
    29 марта 2019, 08:52
    0
    Привет! С ошибкой modRestClient::__construct is deprecated я ещё не разбирался. Это где-то в другом месте используется)

    А ошибки non well formed numeric value у меня нет. Вообще странная она, даже не знаю, в каком месте может появляться…



    Но спасибо, постараюсь разобраться когда-нибудь)
Андрей
02 мая 2019, 12:30
0
при обновлении simpleUpdater как раз эта ошибка и вылетает
modAction support is deprecated since version 2.3.0. Support for modAction has been replaced with routing based on a namespace and action name. Please update the extra with the namespace collections to the routing based system.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.