Cakephp -Minify 400 Bad request

时间:2013-08-08 09:28:12

标签: cakephp cakephp-2.0 cakephp-2.1 minify

我正在使用Cakephp 2.3 ..我使用此插件使用minify

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

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

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

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

当我点击网址时出现此错误

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

我在appController中调用帮助器

 class AppController extends Controller {

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

另一个罪魁祸首是Minify助手。当CakePHP位于子文件夹路径中并通过子文件夹路径访问时,此子文件夹路径将预先添加到Minify帮助程序中使用的HTML帮助程序生成的资产URL。这个问题是在minifier中,$_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()的{​​{1}}方法中的

。这将从路径中剥离子文件夹部分,从而生成正确的文件路径

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

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

现在,如果您不使用Windows系统和/或不使用主题和/或插件资源,那么您可以放弃第一个修复,然后转到子文件夹问题。如上所述,可能的修复需要进一步测试,因此如果您不确定,那么另一个解决方案是将CakePHP安装从Minify/View/Helper/MinifyHelper.php子文件夹移出到文档根目录(或将文档根目录更改为子文件夹,其中如果适用,请安装CakePHP安装。

现在这是一个很长的写作,我希望我发现的实际上是你遇到的同样问题。另一方面,可能值得向插件开发人员报告问题。