0

我已经构建了一个 Laravel 3 应用程序,它涉及到很多每个用户的内容管理。

对于原型和内部测试,我使用了简单的KCFinder配置,现在我们即将开始封闭测试版。

首先,我必须将 KCFinder 锁定在Laravel应用程序身份验证系统后面。
其次,我必须使用每个用户的设置来配置 KCF。

虽然这似乎是两个问题,但我怀疑它们是。


我的 Laravel 安装在/srv/http/,KCFinder 安装在/srv/http/public/php/kcfinder/.

KCFinder 公开了两个传入文件 -browse.phpupload.php. 这些文件包括core/autoload.php,最终将 KCF 联系在一起。

我尝试在其中要求 Laravel ,然后尝试通过浏览器public/index.php访问 KCF ( )。/php/kcfinder/browse.php被重定向到请求路径和 Laravel 应用程序根路径的混合:/php/kcfinder/browser.

如何防止来自 Laravel 的路由并能够在 KCF 范围内使用 Laravel?

PS 我确实尝试过使用 Bundle 的方式,但显然 KCF 写得非常糟糕,以至于为了将它捆绑起来,我必须重写那里的所有内容。

4

1 回答 1

0

我设法用一个非常非常肮脏的黑客来做到这一点。

/srv/http/public/php/kcfinder/core/autoload.php我附加的行:

require '../../../paths.php';

require path('sys').'core.php';

\Laravel\Bundle::start(DEFAULT_BUNDLE);

$KCFinderRoot = addslashes(realpath(dirname(__FILE__). '/../') . DS);

\Laravel\Autoloader::map(array(
    'browser' => $KCFinderRoot . 'core/browser.php',
    'uploader' => $KCFinderRoot . 'core/uploader.php',
    'type_img' => $KCFinderRoot . 'core/types/type_img.php',
    'type_mime' => $KCFinderRoot . 'core/types/type_mime.php',
    'gd' => $KCFinderRoot . 'lib/class_gd.php',
    'input' => $KCFinderRoot . 'lib/class_input.php',
    'zipFolder' => $KCFinderRoot . 'lib/class_zipFolder.php',
    'dir' => $KCFinderRoot . 'lib/helper_dir.php',
    'file' => $KCFinderRoot . 'lib/helper_file.php',
    'httpCache' => $KCFinderRoot . 'lib/helper_httpCache.php',
    'path' => $KCFinderRoot . 'lib/helper_path.php',
    'text' => $KCFinderRoot . 'lib/helper_text.php',
));

if (!\Laravel\Auth::check())
{
    die('no user :(');
}

无论 KCF 有一些文件包含在哪里,我都必须挤进去$KCFinderRoot,在某些方法中甚至以前需要global它们。

在 KCF 的配置中,我添加了:

// ...
'uploadURL' => "/useruploads/" . sha1(Auth::user()->id . Auth::user()->email),
'uploadDir' => path('public') . "useruploads/" . sha1(Auth::user()->id . Auth::user()->email),
// ...

最终结果就像我想要的那样工作,除了我不知道这是多么“聪明”。

PS 在接下来的几天里,我将尝试捆绑 IoC,同时保持 KCF 文件完整。

于 2013-05-30T15:55:58.263 回答