0

我正在开发 Cakephp 2.3 .. 我使用这个插件与 minify 一起工作

https://github.com/maurymmarques/minify-cakephp

但我似乎无法正常工作..我的网站没有正确加载 css 和 js ..

我将文件夹复制到app/plugins目录中,将所有 css 和 js 导入到 layouts 文件夹中的 default.php 文件中,我正在这样做

echo $this->Minify->css(array('reset', 'style','colors'));

在浏览器中,网址变成了这样

<link rel="stylesheet" type="text/css" href="/cakephp/min-css?f=cakephp/css/reset.css,cakephp/css/style.css,cakephp/css/colors.css

当我点击 url 我得到这个错误

  400 Bad request 
 Please see http://code.google.com/p/minify/wiki/Debugging.

我在我的 appController 中调用助手

 class AppController extends Controller {

public $helpers = array('Minify.Minify');
4

1 回答 1

2

我已经尝试过使用与您类似的设置,即子文件夹中的 CakePHP 2.3,并且使用此设置我也收到 400 错误(包括 FirePHP 中的错误消息!)。

在挖掘了源代码后,我发现了两个罪魁祸首,一个是Asset::getAssetFile()in Minify/Utility/Routing/Asset.php,其中为资产生成了正确的 webroot 路径,并且资产 URL 被“转换”为资产文件路径。这些值在 minifiers 配置文件 ( Minify/Vendor/minify/config.php) 中用于覆盖在fURL 变量中传递的值并覆盖$_SERVER['DOCUMENT_ROOT']变量,然后 minifiers 使用该变量来定位资产文件。这里的问题是,对于主题和插件资产,它将路径文件夹分隔符从 转换/DS,这将导致\在 Windows 系统上使用,导致缩小器失败,因为它不允许反斜杠。要解决此问题,implode(DS, $parts)请交换implode('/', $parts).

https://gist.github.com/ndm2/6192506

此方法的另一个问题是它只能处理来自一个位置的资源,即普通资源、插件资源或主题资源。但是,这可能更多是功能限制而不是错误。

另一个罪魁祸首是 Minify 助手。当 CakePHP 位于子文件夹路径中并通过子文件夹路径访问时,该子文件夹路径将添加到由在 Minify 帮助器中使用的 HTML 帮助器生成的资产 URL 之前。这样做的问题是,在压缩器中,$_SERVER['DOCUMENT_ROOT']路径将直接与资产文件路径连接(两者都是由Asset::getAssetFile()前面提到的),导致文件路径像/cakephp/app/webroot/cakephp/css/style.css,其中/cakephp/app/webroot/是 webroot 文件路径,并且cakephp/css/style.css是资产文件路径 (实际上它仍然是一个 URL 片段),当然这些文件不存在。一个快速且可能是肮脏的解决方法是交换

array_push($files, substr($this->assetUrl($asset, $options), 1));

为了

array_push($files, mb_substr($this->assetUrl($asset, $options), mb_strlen($this->request->webroot)));

MinifyHelper::_path()位于的方法中Minify/View/Helper/MinifyHelper.php。这将从路径中剥离子文件夹部分,从而生成正确的文件路径

https://gist.github.com/ndm2/6192504

请记住,这两种可能的修复都需要进行一些测试以确保没有副作用!

现在,如果您不使用 Windows 系统和/或不使用主题和/或插件资产,那么您可以放弃第一个修复,并转到子文件夹问题。如前所述,可能的修复需要进一步测试,因此如果您不确定,那么另一个解决方案是将您的 CakePHP 安装从/cakephp/子文件夹移到文档根目录(或将文档根目录更改为 CakePHP 安装所在的子文件夹如果适用)。

现在写得很长,我希望我发现的实际上与您遇到的问题相同。附带说明一下,无论如何,向插件开发人员报告这些问题可能是值得的。

于 2013-08-09T08:49:00.847 回答