K4:Ошибки при обработке событий
From In-Portal Developers Guide
Revision as of 15:57, 6 January 2009
This article is not finished yet! You see this message because current Article is finished yet or contains unverified information. How to write an Article. |
| ||
---|---|---|
Статьи в этой категории | ||
|
Ошибка при вызове kEventHandler::getPrefixSpecial
Fatal Error: Usage of getPrefixSpecial() this method is forbidden in kEventHandler class children. Use $event->getPrefixSpecial(true); instead in...
Вызов ошибки
Сообщение всегда вызывается из метода kEventHandler::getPrefixSpecial
. Для этого метод kEventHandler::getPrefixSpecial
и был написан.
core\kernel\event_handler.php (69) trigger_error('Usage of getPrefixSpecial() this method is forbidden in kEventHandler class children. Use $event->getPrefixSpecial(true); instead', E_USER_ERROR);
Получение ошибки
Ошибка обычно возникает при вызове метода getPrefixSpecial
у любого наследника kEventHandler.
Исправление ошибки
Вызов метода у наследников kEventHandler
является неправильным, метод getPrefixSpecial
следует вызывать у объекта $event
Ошибка при вызове не существующего события
Fatal Error: event obana not implemented in class..
Сообщение kEventHandler::processEvent
, возникает при попытки обработать не существующие событие.
Вызов ошибки
core\kernel\event_handler.php (103) trigger_error('event '.$event->Name.' not implemented in class '.get_class($this)., E_USER_ERROR);
Получение ошибки
Данная ошибка возникает если для обработчике событий переданного префикса отсутствует запрашиваемое событие. Типичные ситуации:
- Оправленное серверу событие не объявлено. Данные серверу могут быть переданы, как через форму, URL, а также cron запрос.
- При передачи не существующего события, как параметр в метод
Application::HandleEvent
- При передачи не существующего события, как параметр в метод
kEvent::CallSubEvent
Исправление ошибки
Для исправления ошибки необходимо открыть отладчик, определить файл и номер строки ошибки, перейти по заданным координатам и исправить либо опечатку в названии события, либо убедиться в полном отсутствии запрашиваемого метода.
Ошибка при попытке получить объект
Notice: Requested ID for prefix link not passed in...
Вызов ошибки
core\kernel\db\db_event_handler.php (290) trigger_error('Requested ID for prefix '.$event->getPrefixSpecial().' not passed', E_USER_NOTICE);
Получение ошибки
Данная ошибка возникает при попытке получить незагруженный объект объявленного в системе перфикса. Самы е распространенные случаи:
- Попытка получить незагруженный объект через
Application::recallObject
без передачи параметра 'skip_autoload' => true - Попытка либо распечатать, либо вызвать другой метод/тэг инициализирующий объект списка подчененного перфикса в момент отсутствия загруденного
главного перфикса.
Исправление ошибки
- Необходимо передавать параметр 'skip_autoload' => true в метод
Application::recallObject
, если точно известно, что автозагрузка для объекта
запрашиваемого префикса не востребована.
- Необходимо стараться избежать печати списка подчененного перфикса без загруженного объекта главного префикса.
Ошибка при отсутствии права на просмотр
ItemLoad Permission Failed for prefix...
Вызов ошибки =
core\kernel\db\db_event_handler.php (430) trigger_error('ItemLoad Permission Failed for prefix [' . $event->getPrefixSpecial() . '] in checkItemStatus, leading to "404 Not Found"', E_USER_WARNING);
Получение ошибки
Ошибка возникает при выполнении двух условий
- Отсуствие права "view" для секции запрашиваемого префикса.
- Метод
kDBEventHandler::checkItemStatus
, метод для проверки дополнительных условий на просмотр, возвращает false.
Исправление ошибки
- Для локализации ошибки для начала необходимо убедиться, что на секцию префикса установленны права на просмотр. Если права нету, его нужно поствить.
Права проставляются через секцию Users Management -> Groups
для необходимой группы пользователей. Если секция Users Management -> Groups
не доступна,
рекомендуется воспользоваться средствами PMA для проставления прав в ручную группе "Admins".
- Посредством Zend Debugger выяснить по какой причине метод
kDBEventHandler::checkItemStatus
, возвращаетfalse
и на основе полученных результатов добавить
коррекции с код.
Ошибка некорректной связки значения PerPage в конфигурационном файле
Incorrect mapping of PerPage key in config for prefix...
Вызов ошибки =
core\kernel\db\db_event_handler.php (754) trigger_error('Incorrect mapping of PerPage key in config for prefix '.$event->Prefix., E_USER_WARNING);
Получение ошибки
Значение PerPage задается несколькими способами:
- всегда задается значение поумолчанию
- на шаблоне путем передачи параметра
per_page
в тэг иниацилизирущий необходимий экземлярkDBList/code>
- в php файле путем передачи параметра <code>per_page в метод/функцию иниацилизирущий необходимий экземляр
kDBList/code>
- значение PerPage также может хранится в базе, в таблице PersistantSessionData
- или определятся через связку в конфигурационном файле:
'ConfigMapping' => Array( 'ShortListPerPage' => 'ShortListPerPage_Value'; 'PerPage' => 'PerPage_Value'; );
Если системе не удается найти значение PerPage ни таблице PersistantSessionData, ни в Сессии, система попытается определить значение PerPage через связку в конфигурационном файле по заранее определенной зависимости в случае если в конфигурационном файле задан коюч 'ConfigMapping'. Если значение PerPage определить не удасца, тогда возникнет описываемая ошибка. Онако, если ключ 'ConfigMapping' не задан, тогда в тогда будет использоваться значение поумолчанию.
function getPerPage(&$event) { // 1. per-page is passed as tag parameter to PrintList, InitList, etc. $per_page = $event->getEventParam('per_page'); /*if ($per_page == 'list_next') { $per_page = ''; }*/ // 2. per-page variable name is store into config variable $config_mapping = $this->Application->getUnitOption($event->Prefix, 'ConfigMapping'); if ($config_mapping) { switch ( $per_page ){ case 'short_list' : $per_page = $this->Application->ConfigValue($config_mapping['ShortListPerPage']); break; case 'default' : $per_page = $this->Application->ConfigValue($config_mapping['PerPage']); break; } } if (!$per_page) { // per-page is stored to persistent session $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view'); $storage_prefix = $event->getEventParam('same_special') ? $event->Prefix : $event->getPrefixSpecial(); $per_page = $this->Application->RecallPersistentVar($storage_prefix.'_PerPage.'.$view_name, '_USE_DEFAULT_USER_DATA_'); if (!$per_page) { // per-page is stored to current session $per_page = $this->Application->RecallVar($storage_prefix.'_PerPage'); } if (!$per_page) { if ($config_mapping) { if (!isset($config_mapping['PerPage'])) { trigger_error('Incorrect mapping of <span class="debug_error">PerPage</span> key in config for prefix <b>'.$event->Prefix.'</b>', E_USER_WARNING); } $per_page = $this->Application->ConfigValue($config_mapping['PerPage']); } if (!$per_page) { // none of checked above per-page locations are useful, then try default value $per_page = 10; } } } return $per_page; }
Исправление ошибки
Если в конфигурационном файле задан ключ 'ConfigMapping', необходимо убедиться что:
- в массиве 'ConfigMapping' определены значения для ключей 'ShortListPerPage' и'PerPage'.
- посредсвом отладчика убедиться, что в методе 'getPerPage' значение $event->getEventParam('per_page') либо 'short_list', либо 'default';
Ошибка при вызове несуществующего события для отсылки события
<code>Fatal Error: Invalid email event name...
Вызов ошибки
Сообщение вызывается из события EmailEventsEventsHandler::OnEmailEvent
, при попытке вызвать несуществующие собитие для отсылки писем.
core\units\email_events\email_events_event_handler.php (322)) trigger_error('Invalid email event name '.$email_event_name.'. Use only UPPERCASE characters and dots as email event names', E_USER_ERROR);
Получение ошибки
Ошибка обычно возникает при неправельной передачи имени события отсылки писем как на форме, так и в PHP коде.
Исправление ошибки
Следует убедиться, что запрашиваемое событие дествительно существует и передаваемое название события для отсылки писем полностью совпадает с существующим событием.
Ошибка при попытке
Fatal Error: IDs not passed to...
Вызов ошибки
Сообщение вызывается из события kCatDBEventHandler::CheckPermission
core\units\general\cat_event_handler.php (111) trigger_error('IDs not passed to '.$event->getPrefixSpecial().':CheckPermission', E_USER_WARNING);
Получение ошибки
Ошибка обычно возникает при
Исправление ошибки
Следует убедиться, что
Ошибка при фильтрации списков category_items
Fatal Error: ItemType not defined for prefix...
Вызов ошибки
Ошибка вызывается из метода kCatDBEventHandler::getTypeClauses
Prefix . , E_USER_WARNING);
Получение ошибки
Если при инициализации списка любых category_items (все префиксы, EH
которых являются наследниками kCatDBEventHandler
) был передан параметр types
со значением related
,
тогда в методе kCatDBEventHandler::SetCustomQuery
, метод kCatDBEventHandler::getTypeClauses
выдаст ошибку, если в конфигурационном файле неопределено значение для ключа "ItemType".
Исправление ошибки
Следует убедиться, что в конфигурационном файле определено значение для ключа "ItemType, что нету опечаток.
Ошибка при фильтрации списка категорий
Fatal Error: ItemType not defined for prefix...
Вызов ошибки
Ошибка вызывается из метода CategoriesEventHandler::SetCustomQuery
.
core\units\categories\categories_event_handler.php (230) trigger_error('ItemType not defined for prefix ' . $event->Prefix . , E_USER_WARNING);
Получение ошибки
Если при инициализации списка категорий, был передан параметр types
со значением related
, тогда метод CategoriesEventHandler::SetCustomQuery
выдаст ошибку,
если в конфигурационном файле неопределено значение для ключа "ItemType".
Исправление ошибки
Следует убедиться, что в конфигурационном файле определено значение для ключа "ItemType, что нету опечаток.
Ошибка при вызове события для несуществующего префикса
Fatal Error: Prefix... not registred...
Вызов ошибки
Сообщение вызывается из события kEventManager::HandleEvent
core\kernel\event_manager.php (271) trigger_error('Prefix '.$event->Prefix.' not registred (requested event '.$event->Name.')', E_USER_NOTICE);
Получение ошибки
Ошибка обычно возникает при попытке обработать событие для несущестыующего префикса.
Исправление ошибки
Следует убедиться, что запрашиваемый префикс дествительно существует.
Ошибка при вызове хук-события
Fatal Error: Prefix... doesn\'t exist when trying to hook from...
Вызов ошибки
Сообщение вызывается из события kEventManager::registerHook
.
core\kernel\event_manager.php (487) trigger_error('Prefix '.$hookto_prefix.' doesn\'t exist when trying to hook from '.$do_prefix.':'.$do_event., E_USER_WARNING);
Получение ошибки
Ошибка обычно возникает, если не определен префикс для запрашиваемого хук-события
Исправление ошибки
Следует убедиться, что запрашиваемый префикс дествительно существует.