我正在使用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');
答案 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安装。
现在这是一个很长的写作,我希望我发现的实际上是你遇到的同样问题。另一方面,可能值得向插件开发人员报告问题。