我对easyblog有个问题。当我试图通过后端打开博客条目时,我会得到以下错误:
致命错误:在第46行的/home/mysit/public_html/localadvertiser/administrator/components/com_easyblog/tables/mediamanager.php中,EasyBlogTableMediaManager::bind()的声明必须与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 );
}
}发布于 2015-01-11 02:05:28
TLDR
是的,我认为出现错误是因为错误报告设置为最大,这可能是在强制使用STRICT模式,如果您将级别设置为None,它应该工作得很好,因为这会将display_errors设置为。这也可能是您在服务器上使用PHP5.4或更高版本(A ™)的一个指示。
更长更精确:
正如错误声明的那样,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文档:
注意:实现接口的类必须使用与接口中定义的完全相同的方法签名。不这样做将导致致命错误。
在Joomla2.5.x和Joomla3.x之间,几个方法签名发生了变化,考虑到它是一个主要版本号更改 --这是预期的,开发人员可以为每个版本生成单独的扩展构建,以避免这个问题,但它确实引入了额外的支持层。
如果您需要在Maximum上报告错误
只需将方法签名更改为以下内容,您就可以修复它:
public function bind( $data = array(), $ignore = array())
{
return parent::bind( $data );
}但是,这可能会导致错误在类层次结构上进一步移动,并且如果您更新EasyBlog版本(因为您的更改将被重写),很可能会重新出现。最好还是和EasyBlog开发人员一起谈吧。
发布于 2015-01-12 08:34:05
修好了!我使用了以下代码
public function bind( $data = array(), $ignore = array())
{
return parent::bind( $data );
}给出了一个违反标准错误
为了解决这个问题,我需要通过向EasyBlogTableMediaManager类添加额外的参数,对load函数的声明进行以下更改-
public function load($path = '' , $type = '' , $keys = null, $reset = true )https://stackoverflow.com/questions/27840702
复制相似问题