zend tutorial skeleton framework español docs create php zend-framework2

php - tutorial - zend framework download



Cómo fusionar los directorios del módulo Zend Framework 2 (3)

Algunos módulos zf2 tienen directorios públicos para la distribución de recursos como js / css / images. ¿Cuál es la mejor práctica para hacer que estos recursos estén disponibles para la aplicación?

Me gustaría que estos recursos estuvieran disponibles automáticamente a través de http://mysite.com/[moduleName]/ . Por ejemplo,

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

¿Deben copiarse estos recursos en el directorio raíz / público? La copia manual será dolorosa, y dudo que un proceso de compilación automatizado para fusionar los directorios sea muy práctico tampoco.

Tal vez hay algo de magia que se puede trabajar con httpd.conf o .htaccess?

Tal vez los enlaces simbólicos son la solución? Pero, los enlaces simbólicos no son sencillos para ponerse en marcha en una plataforma Windows, y deberían crearse manualmente para cada módulo individual.


Hay 4 maneras de manejar esto:

  1. Simulación de activos en el directorio public/
  2. Copiar y pegar activos de los módulos al directorio public/
  3. Uso de una configuración de host virtual particular (o configuración del servidor web en general)
  4. Utilice un módulo de gestión de activos, como uno de los siguientes:

    • AssetManager , respaldado por assetic , combina los activos en tiempo de ejecución, almacena en caché para los entornos de producción y los filtros para la minificación de CSS / JS y la conversión de LESS / SASS, permite exponer los activos de los directorios en los módulos en sí mismos.
    • zf2-assetic-module - respaldado por assetic - maneja la assetic CSS / JS y la conversión de LESS / SASS en tiempo de ejecución
    • BaconAssetLoader : expone los activos de los módulos implementándolos en el directorio public/ en el momento de la implementación

Hay muchas maneras de hacerlo.

En mi opinión, Assetic es un desperdicio de rendimiento informático, y una muy mala adaptación para este simple problema.

El problema, como se indicó, es acceder / público desde los módulos.

Mi solución es la siguiente:

Edite htdocs / yoursite / public / .htaccess para agregar esta línea justo después de RewriteEngine On:

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

Edite htdocs / yoursite / public / index.php y agregue este código justo después de 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(); }

Uso: / resource / moduleName / ruta

Ejemplo: http://yoursite.com/resource/Statistics/css/style.css leerá el css real de su sitio / módulo / Estadísticas / public / css / style.css.

Es rápido, seguro, no necesita que especifique ninguna ruta en la configuración, no necesita instalación, no depende del mantenimiento de terceros y no necesita ayuda a la vista. Simplemente acceda / recurso desde cualquier lugar! Disfrutar :)


Puede intentar usar phing para administrar su proceso de compilación y automatizarlo todo. Tendrías que escribir el script de compilación, pero después sería como tocar el reproductor en un reproductor de CD.

Por supuesto que para probar sería un dolor.