In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Ошибки при обработке событий

From In-Portal Developers Guide

Jump to: navigation, search

Revision as of 15:57, 6 January 2009


Обработка ошибок Обработка ошибок
Статьи в этой категории

Contents

Ошибка при вызове 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::getTypeClausesPrefix . , 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);

Получение ошибки

Ошибка обычно возникает, если не определен префикс для запрашиваемого хук-события

Исправление ошибки

Следует убедиться, что запрашиваемый префикс дествительно существует.