如何合并的Zend Framework 2模块公共目录(How to merge Zend Fram

2019-06-23 21:48发布

有些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平台上的去,将需要手动创建为每个单独的模块。

Answer 1:

有处理这4种方式:

  1. 在符号链接资产的public/目录
  2. 从模块复制粘贴资产public/目录
  3. 使用特定的虚拟主机配置 (或一般Web服务器配置)
  4. 使用一个资产管理器模块,以下等为一体:

    • AssetManager -后盾assetic -在运行时合并资产,对生产环境和过滤器对CSS / JS缩小和LESS / SASS转换缓存,允许从模块自身的目录暴露的资产。
    • ZF2-assetic模块 -通过支持assetic -处理CSS / JS缩小和LESS / SASS转换在运行时
    • BaconAssetLoader -通过在部署他们面临从模块资产public/在部署时DIR


Answer 2:

这样做有它的许多方面。

在我看来,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。

它的快速,安全的,不需要你在配置指定任何路径,不需要安装,不依赖于第三方维护,并且需要在视图中没有帮手。 简单地从任何地方访问/资源! 请享用 :)



Answer 3:

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.



文章来源: How to merge Zend Framework 2 module public directories