有些ZF2模块具有资源分配的公共目录,例如JS / CSS /图像。 是什么使这些resouces提供给应用程序了最佳做法?
我想它使这些资源是通过自动提供http://mysite.com/[moduleName]/
。 例如,
root/public/js/sitescript.js
- > http:\\mysite.com\js\sitescript.js
root/module/mymodule/public/js/modulescript.js
- > http:\\mysite.com\mymodule\js\modulescript.js
root/vendor/vendormodule/public/js/vendorscript.js
- > http:\\mysite.com\vendormodule\js\vendorscript.js
如果这些资源被复制到根/ public目录? 手动复制将是痛苦的,我怀疑一个自动生成过程进行合并的目录将是非常practial无论是。
也许有一些神奇的是可以用的httpd.conf或的.htaccess来工作?
或许符号链接是解决? 但是,符号链接不直截了当地获得一个Windows平台上的去,将需要手动创建为每个单独的模块。
这样做有它的许多方面。
在我看来,Assetic是计算性能的浪费,以及一个非常糟糕的适合这个简单的问题。
该问题,如上所述,从模块访问/公共。
我的解决方案如下:
编辑的htdocs / yoursite /公/ htaccess来之后RewriteEngine叙述在添加此行:
RewriteRule ^resource/([a-zA-Z0-9\.\-]+)/([a-zA-Z0-9\.\-_\/]+)$ index.php?action=resource&module=$1&path=$2 [QSA,L]
编辑的htdocs / yoursite /公/ index.php文件,并添加该代码后右CHDIR(目录名(DIR));:
if (isset($_GET['action']) && $_GET['action'] == "resource") {
$module = $_GET['module'];
$path = $_GET['path'];
if (!ctype_alnum($module))
die("Module name must consist of only alphanumeric characters");
$filetype = pathinfo($path, PATHINFO_EXTENSION);
$mimetypes = array(
'js' => "text/javascript",
'css' => "text/css",
'jpg' => "image/jpeg",
'jpeg' => "image/jpeg",
'png' => "image/png"
);
if (!isset($mimetypes[$filetype]))
die(sprintf("Unrecognized file extension '%s'. Supported extensions: %s.", htmlspecialchars($filetype, ENT_QUOTES), implode(", ", array_keys($mimetypes))));
$currentDir = realpath(".");
$destination = realpath("module/$module/public/$path");
if (!$destination)
die(sprintf("File not found: '%s'!", htmlspecialchars("module/$module/public/$path", ENT_QUOTES)));
if (substr($destination, 0, strlen($currentDir)) != $currentDir)
die(sprintf("Access to '%s' is not allowed!", htmlspecialchars($destination, ENT_QUOTES)));
header(sprintf("Content-type: %s", $mimetypes[$filetype]));
readfile("module/$module/public/$path", FALSE);
die();
}
用法:/资源/模块名/路径
例如: http://yoursite.com/resource/Statistics/css/style.css将宣读yoursite /模块/统计/公/ CSS / style.css中的实际CSS。
它的快速,安全的,不需要你在配置指定任何路径,不需要安装,不依赖于第三方维护,并且需要在视图中没有帮手。 简单地从任何地方访问/资源! 请享用 :)
You could try using phing to manage your build process and have it automate it all. You'd have to write the build script but afterwards it would just be like hitting play on a cd player.
Of course for testing it would be a pain.