Как объединить общие каталоги Zend Framework 2

Некоторые модули zf2 имеют общедоступные каталоги для распределения ресурсов, таких как js / css / images. Какова наилучшая практика для предоставления этих ресурсов для применения?

Мне бы хотелось, чтобы эти ресурсы были автоматически доступны через http://mysite.com/[moduleName]/ . Например,

  • Лучшая практика хранения папок Codeigniter
  • mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, указанная строка
  • Используйте $ _POST для получения входных значений на одной странице
  • Как запустить PHP из командной строки Windows
  • Является ли htmlspecialchars достаточным для предотвращения SQL-инъекции переменной, заключенной в одинарные кавычки?
  • Лучше всего использовать частные методы или защищенные методы?
  • 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

    Должны ли эти ресурсы копироваться в корневой / общедоступный каталог? Ручное копирование будет болезненным, и я сомневаюсь, что автоматизированный процесс сборки для объединения каталогов будет очень практичным.

    Возможно, есть какая-то магия, с которой можно работать с httpd.conf или .htaccess?

    Возможно, символические ссылки – это решение? Но символические ссылки не имеют прямого отношения к платформе Windows и должны создаваться вручную для каждого отдельного модуля.

  • PHP: исключения против ошибок?
  • Angularjs - Загрузка файла с помощью php
  • Как я могу получить доступ к роли пользователя в классе Form Builder в Symfony2
  • Каков правильный способ создания наблюдателя в Magento?
  • Алгоритм кластеризации карт
  • PHP Получить имя текущего каталога
  • 3 Solutions collect form web for “Как объединить общие каталоги Zend Framework 2”

    Есть четыре способа справиться с этим:

    1. Symlinking активы в public/ директории
    2. Скопировать файлы из модулей в public/ каталог
    3. Используя определенную конфигурацию виртуального хоста (или, как правило, конфигурацию веб-сервера)
    4. Используйте модуль управления активами, например, один из следующих:

      • AssetManager – подкрепляется assetic – объединяет активы во время выполнения, имеет кеширование для производственных сред и фильтры для минимизации CSS / JS и LESS / SASS, позволяет выставлять ресурсы из каталогов в самих модулях.
      • zf2-assetic-module – при поддержке assetic – обрабатывает минимизацию CSS / JS и преобразование LESS / SASS во время выполнения
      • BaconAssetLoader – выдает активы из модулей, развертывая их в public/ dir во время развертывания

    Есть много способов сделать это.

    На мой взгляд, Assetic – это трата вычислительной производительности и очень плохо подходит для этой простой проблемы.

    Проблема, как сказано, является доступ к / публичным из модулей.

    Мое решение таково:

    Измените htdocs / yoursite / public / .htaccess, чтобы добавить эту строку сразу после RewriteEngine On:

     RewriteRule ^resource/([a-zA-Z0-9\.\-]+)/([a-zA-Z0-9\.\-_\/]+)$ index.php?action=resource&module=$1&path=$2 [QSA,L] 

    Измените htdocs / yoursite / public / index.php и добавьте этот код сразу после chdir (dirname ( 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(); } 

    Использование: / resource / moduleName / path

    Пример: http://yoursite.com/resource/Statistics/css/style.css прочитает фактический css с вашего сайта / модуля / Statistics / public / css / style.css.

    Это быстро, безопасно, вам не нужно указывать какие-либо пути в конфигурации, не требует установки, не полагается на стороннее обслуживание и не нуждается в помощнике. Просто доступ / ресурс из любого места! Наслаждаться 🙂

    Вы можете попробовать использовать phing для управления процессом сборки и автоматизировать его все. Вам нужно будет написать сценарий сборки, но потом это будет просто удар по игре на CD-плеере.

    Конечно, для тестирования это было бы болью.

    PHP is the Best Programming Language in the world.