elFinder 覆盖 'rm' PHP

elFinder override 'rm' PHP

我正在使用 elFinder 来管理网站的资产,它的默认功能非常有用;然而,我需要向驻留在我的控制器中的几个 PHP 函数添加一些额外的逻辑。

我想添加逻辑的地方是 <elfinder_Dir>/PHP/elFinderVolumeLocalFileSystem.php,特别是在函数 _unlink($path) 中,在实际删除文件之前我想调用另一个 class销毁此资产的数据库条目。

原始函数如下所示:

protected function _unlink($path) {
    return @unlink($path);
} 

当我尝试添加如下代码时:

protected function _unlink($path) {
    var_dump($path);
    return @unlink($path);
} 

//top of file...
use controllers\ResourceManager;

//OR
//include <pathToResourceManager>

//...

protected function _unlink($path) {
    ResourceManager::delteFromDB();
    return @unlink($path);
}

我在屏幕上收到此警报:

我还注意到,当给出该消息时,我的 "Network" 选项卡中的 header 显示 text/html 的响应 Header Content-type 而不是application/json 正如 elFinder 的 JS 部分所期望的那样。

为什么在我添加自定义逻辑时 header Content-type 会发生变化? 有没有更好的方法将此功能添加到项目中?

我的问题的答案非常简单明了。

1) error_reporting(0); 消除了所有与为我的文件使用正确命名空间相关的错误,我将其更改为 error_reporting(E_ALL) 这样我就可以看到真正的问题。

2) 需要将文件添加到 namespace,因为我使用了相同的命名空间,所以我没有任何额外的 include_once() 调用。

接下来我必须添加替换这一行:

$class = 'elFinderVolume'.(isset($o['driver']) ? $o['driver'] : '');

有:

$class = __NAMESPACE__ . '\elFinderVolume'.(isset($o['driver']) ? $o['driver'] : '');

这允许正确加载驱动程序(现在位于命名空间中)。

完成这些更改后,一切都很好,我可以在需要的地方添加我自己的逻辑。