En pub/index.php
, el siguiente código se utiliza para establecer las URL de cambio para medios y activos estáticos para omitir "/ pub":
$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
Desafortunadamente, en los scripts CLI ( bin/magento
) no hay nada como esto.
Encontré la clase Magento\Setup\Mvc\Bootstrap\InitParamListener
con el siguiente código:
$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);
Pero no entiendo dónde este administrador de servicios de Zend recupera los datos y cómo podría ser posible influir en ellos.
Mi problema concreto es que un indexador tiene que generar URL completos y actualmente lo hace http://magento.local/pub/media/...
, donde necesito que estéhttp://magento.local/media/...
¿Cómo puedo decirle a la CLI que mi host virtual apunta pub
y que "pub" no debe formar parte de las URL?
Idealmente, esto debería funcionar sin tener que depender de parámetros adicionales de CLI o variables de entorno.
--magento-init-params=MAGE_DIRS[media][uri]=media
. En realidad, esto funciona para todos los comandos (evidente al recorrer el código), pero los comandos fuera delsetup:
espacio de nombres incorrectamente dan un error de que la opción no existe.Respuestas:
Después de mucho trabajo, encontré una solución usando variables de entorno, que sé que no es lo que querías. Puede configurar los parámetros utilizando variables de entorno como esta (reemplazando
$APP_ROOT
con su raíz Magento real):Tenga en cuenta que es necesario especificar la ruta base como se indicó anteriormente porque cuando usa variables de entorno, su
MAGE_DIRS
definición sobrescribe el valor predeterminado inicial que incluye eso. Sin embargo, se fusionará con la configuración predeterminada más completa en\Magento\Framework\App\Filesystem\DirectoryList
.Agradezco esta respuesta del propio arquitecto jefe por ponerme en la esencia:
¿Cómo cambiar el directorio "var" de Magento a otro lugar en Magento 2?
fuente
env
en el formatoFOO=bar
se configuran como variables de entorno para el comando al final, en este casobin/magento
).indexer:reindex
concron:run
(y aún actualice $ APP_ROOT también, por supuesto). Luego suelte todo eso en el crontab. No estoy seguro de si a crontab le gustarán las nuevas líneas, por lo que podría reemplazarlas con espacios (eliminando las barras diagonales posteriores en ese caso).Otra opción más simple es simplemente codificar la ruta de medios en la configuración de la tienda en Tiendas> Configuración> Web para:
y
Debido crédito a https://github.com/magento/magento2/issues/9111#issuecomment-292002922
fuente
Encontré otra forma de configurar a
MAGE_DIRS
través de CLI, solo copiea
Y ahora puede cambiar el directorio predeterminado de todos los archivos internos.
fuente