Неустранимая ошибка: объявление EasyBlogTableMediaManager :: bind () должно быть совместимо с JTableInterface :: bind ()

0

У меня проблема с 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 );
    }
}
  • 0
    Для начала попробуйте разместить код в строке 46 файла, упомянутого в вашей ошибке :)
Теги:
joomla

2 ответа

0
Лучший ответ

TL;DR

Да, я думаю, что ошибка возникает, потому что у вас установлен максимальный отчет об ошибках, который, вероятно, вызывает режим STRICT, если вы установите уровень None он должен работать нормально, поскольку это установит display_errors в 0. Это также, вероятно, указание на то, что вы используете PHP 5.4 или выше на своем сервере (A Good Thing ).

Дольше и точнее:

Поскольку в Declaration of EasyBlogTableMediaManager::bind() ошибки указано, что 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.

0

Исправлена! Я использовал следующий код

    public function bind( $data = array(), $ignore = array())
{
    return parent::bind( $data );
}

Что дало ошибку нарушения стандартов

Чтобы исправить это, мне нужно было внести следующие изменения в объявление функции загрузки, добавив дополнительные параметры в класс EasyBlogTableMediaManager -

public function load($path = '' , $type = '' ,   $keys = null, $reset = true )

Ещё вопросы

Сообщество Overcoder
Наверх
Меню