У меня проблема с easyblog
, Когда я пытаюсь открыть запись в блоге через бэкэнд, я получаю следующую ошибку:
Неустранимая ошибка: объявление EasyBlogTableMediaManager :: bind () должно быть совместимо с JTableInterface :: bind () в /home/mysit/public_html/localadvertiser/administrator/components/com_easyblog/tables/mediamanager.php в строке 46
я бегу Joomla 3.2.5
Сообщение об ошибке установлено на «максимум». Любая идея, что проблема может быть здесь?
Это файл, где происходит ошибка
class EasyBlogTableMediaManager extends EasyBlogTable
{
var $id = null;
var $path = '';
var $type = '';
var $params = '';
function __construct(& $db )
{
parent::__construct( '#__easyblog_mediamanager' , 'id' , $db );
}
public function bind( $data = array() )
{
return parent::bind( $data );
}
public function load( $path , $type )
{
$db = EasyBlogHelper::db();
$query = 'SELECT * FROM ' . EasyBlogHelper::getHelper( 'SQL' )->nameQuote( $this->_tbl );
$query .= ' WHERE ' . EasyBlogHelper::getHelper( 'SQL' )->nameQuote( 'path' ) . '=' . $db->Quote( $path );
$query .= ' AND ' . EasyBlogHelper::getHelper( 'SQL' )->nameQuote( 'type' ) . '=' . $db->Quote( $type );
$db->setQuery( $query );
$obj = $db->loadObject();
return parent::bind( $obj );
}
}
Да, я думаю, что ошибка происходит из-за того, что для сообщения об ошибках установлено максимальное значение, что, вероятно, вызывает STRICT
режим, если вы установите уровень None
он должен работать нормально, так как это установит display_errors
в 0. Это также, вероятно, признак того, что вы используете PHP 5.4 или выше на вашем сервере (Хорошая вещь™).
Как говорится в ошибке Declaration of EasyBlogTableMediaManager::bind()
должен быть совместимым (т.е. таким же / совпадающим) с первоначальным объявлением в JTableInterface
учебный класс.
Это говорит нам о том, что EasyBlogTableMediaManager
который расширяется EasyBlogTable
имеет в качестве родительского класса, возвращаясь к JTable
(найдено на /libraries/joomla/table/table.php
) который определяется как:
abstract class JTable extends JObject implements JObservableInterface, JTableInterface
Вы заметите, что он реализует JTableInterface
, что означает, что оригинал JTable->bind()
должен соответствовать интерфейс декларация о JTableInterface
(найдено на /libraries/joomla/table/interface.php
) вы увидите, что он определен в файле интерфейса как:
public function bind($src, $ignore = array());
Когда вы сравните это с декларацией в EasyBlogTableMediaManager
класс, который вы предоставили:
public function bind( $data = array() )
{
return parent::bind( $data );
}
Вы можете видеть, что сигнатуры методов различны (т.е. EasyBlog bind()
Метод определяет только один параметр $data
). Итак, цитируя документацию PHP для интерфейс связаны ранее:
Примечание. Класс, реализующий интерфейс, должен использовать точно такой же
подписи метода как определено в интерфейсе. Не делать так будет
привести к фатальной ошибке.
Между Joomla 2.5.x и Joomla 3.x изменилось несколько сигнатур методов, учитывая, что это изменение номера основной версии Этого следует ожидать, и разработчики могут создавать отдельные сборки расширений для каждой версии, чтобы избежать этой проблемы, но при этом появляется дополнительный уровень поддержки.
Maximum
Вы можете исправить это, просто изменив сигнатуру метода следующим образом:
public function bind( $data = array(), $ignore = array())
{
return parent::bind( $data );
}
Однако это может привести к тому, что ошибка переместится дальше вверх по иерархии классов и, вероятно, появится снова, если вы обновите версию EasyBlog (поскольку ваши изменения будут перезаписаны). Вероятно, это лучше разработчик EasyBlog.
Исправлена!
Я использовал следующий код
public function bind( $data = array(), $ignore = array())
{
return parent::bind( $data );
}
Который дал ошибка нарушения стандартов
Чтобы это исправить, мне нужно было внести следующие изменения в объявление функции загрузки, добавив дополнительные параметры в класс EasyBlogTableMediaManager —
public function load($path = '' , $type = '' , $keys = null, $reset = true )