Раздел вопрос-ответ Array to string conversion Kohana

ErrorException [ 8 ]: Array to string conversion ~ SYSPATH/classes/Kohana/Log/Writer.php [ 81 ]

Версия Kohana 3.3.

Kohana PHP framework

share

1 ответ

Эта баг фреймворка Kohana версии 3.3! Пофиксить просто (заменить две строки в Log/Writer.php).

1. Заменяем строку 

$string = strtr($format, $message);

на строку:

$string = strtr($format, array_filter($message, 'is_scalar'));
2. А также заменяем строку
$string .= PHP_EOL.strtr($format, $message);

на строку:

$string .= PHP_EOL.strtr($format, array_filter($message, 'is_scalar'));

https://github.com/kohana/core/commit/82b470b2827470da37b0e6771b77c369c3d2e5fb

Kohana/Log/Writer.php (здесь см. строки 13, 22):

/**
 * Formats a log entry.
 * 
 * @param   array   $message
 * @param   string  $format
 * @return  string
 */
public function format_message(array $message, $format = "time --- level: body in file:line")
{
	$message['time'] = Date::formatted_time('@'.$message['time'], Log_Writer::$timestamp, Log_Writer::$timezone, TRUE);
	$message['level'] = $this->_log_levels[$message['level']];

	//$string = strtr($format, $message);
	$string = strtr($format, array_filter($message, 'is_scalar'));

	if (isset($message['additional']['exception']))
	{
		// Re-use as much as possible, just resetting the body to the trace
		$message['body'] = $message['additional']['exception']->getTraceAsString();
		$message['level'] = $this->_log_levels[Log_Writer::$strace_level];

		//$string .= PHP_EOL.strtr($format, $message); //эту строку меняем на следующую
		$string .= PHP_EOL.strtr($format, array_filter($message, 'is_scalar'));
	}

	return $string;
}

 

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться
    НОВЫЕ ПОЛЬЗОВАТЕЛИ