0

に問題がありeasyblogます。バックエンドからブログ エントリを開こうとすると、次のエラーが表示されます。

致命的なエラー: EasyBlogTableMediaManager::bind() の宣言は、46 行目の /home/mysit/public_html/localadvertiser/administrator/components/com_easyblog/tables/mediamanager.php の JTableInterface::bind() の宣言と互換性がある必要があります

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 );
    }
}
4

2 に答える 2

0

TLDR

はい、エラー報告が最大に設定されているため、エラーが発生していると思います。これはおそらくSTRICTモードを強制しています。レベルを設定すると、これは0Noneに設定されるdisplay_errorsため、正常に動作するはずです。これはおそらく、サーバーで PHP 5.4 以降を使用していることを示しています ( A Good Thing ™)。

より長く、より正確に:

エラーが示すように、クラス内の元の宣言と互換性がある (つまり、同じ/一致する)Declaration of EasyBlogTableMediaManager::bind() 必要があります。JTableInterface

これは、EasyBlogTableMediaManagerwhich extendsが次のように定義されている(found at )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 );
}

メソッド シグネチャが異なることがわかります (つまり、EasyBlogbind()メソッドは 1 つのパラメーターのみを定義しています$data)。したがって、以前にリンクされたインターフェイスの PHP ドキュメントを引用すると、次のようになります。

注: インターフェイスを実装するクラスは、インターフェイスで定義されているものとまったく同じメソッド シグネチャを使用する必要があります。そうしないと、致命的なエラーが発生します。

Joomla 2.5.x と Joomla 3.x の間で、いくつかのメソッド シグネチャが変更されました。これはメジャー バージョン番号の変更であるため、これは予想されることであり、開発者はこの問題を回避するためにバージョンごとに個別の拡張ビルドを作成できますが、追加のレイヤーが導入されます。サポート。

エラー報告が必要な場合Maximum

メソッドのシグネチャを次のように変更するだけで修正できる場合があります。

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

ただし、これにより、エラーがクラス階層のさらに上に移動する可能性があり、EasyBlog のバージョンを更新すると (変更が上書きされるため) 再び表示される可能性があります。EasyBlogの開発者に相談するのがおそらく最善です。

于 2015-01-11T02:05:28.320 に答える