Dans pub/index.php
, le code suivant est utilisé pour définir les URL de modification des médias et des actifs statiques de manière à omettre "/ 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);
Malheureusement, dans les scripts CLI ( bin/magento
), il n'y a rien de tel.
J'ai trouvé la classe Magento\Setup\Mvc\Bootstrap\InitParamListener
avec le code suivant:
$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);
Mais je ne comprends pas où ce Zend Service Manager récupère les données et comment il pourrait être possible de les influencer.
Mon problème concret est qu'un indexeur doit générer des URL complètes et le fait actuellement comme http://magento.local/pub/media/...
, où j'en ai besoinhttp://magento.local/media/...
Comment puis-je dire à la CLI que mon hôte virtuel pointe vers pub
et que "pub" ne doit pas faire partie des URL?
Idéalement, cela devrait fonctionner sans avoir à s'appuyer sur des paramètres CLI ou des variables d'environnement supplémentaires.
--magento-init-params=MAGE_DIRS[media][uri]=media
. Cela fonctionne en fait pour toutes les commandes (évident en parcourant le code), mais les commandes en dehors de l'setup:
espace de noms donnent incorrectement une erreur que l'option n'existe pas.Réponses:
Après beaucoup de travail, j'ai trouvé une solution utilisant des variables d'environnement, ce que je sais n'est pas ce que vous vouliez. Vous pouvez définir les paramètres à l'aide de variables d'environnement comme celle-ci (en les remplaçant
$APP_ROOT
par votre racine Magento réelle):Notez qu'il est nécessaire de spécifier le chemin de base comme ci-dessus, car lorsque vous utilisez des variables d'environnement, votre
MAGE_DIRS
définition remplace la valeur par défaut initiale qui inclut cela. Cependant, il sera fusionné avec la configuration par défaut plus complète dans\Magento\Framework\App\Filesystem\DirectoryList
.Crédits à cette réponse de l'architecte en chef lui-même pour m'avoir mis sur l'odeur:
Comment changer le répertoire "var" de Magento à un autre endroit dans Magento 2?
la source
env
au formatFOO=bar
sont définis comme variables d'environnement pour la commande à la fin, dans ce casbin/magento
).indexer:reindex
parcron:run
(et toujours mettre à jour $ racine_app aussi bien sûr). Déposez ensuite le tout dans la crontab. Vous ne savez pas si crontab aimera les nouvelles lignes, vous pouvez donc simplement les remplacer par des espaces (en supprimant les barres obliques inverses dans ce cas).Une autre option plus simple consiste à simplement coder en dur le chemin du média dans la configuration du magasin sous Magasins> Configuration> Web pour:
et
Crédit dû à https://github.com/magento/magento2/issues/9111#issuecomment-292002922
la source
J'ai trouvé un autre moyen de définir
MAGE_DIRS
via CLI, il suffit de copierà
Et maintenant, vous pouvez changer le répertoire par défaut de tous les fichiers internes.
la source