In pub/index.php
wird der folgende Code verwendet, um Änderungs-URLs für Medien und statische Assets so festzulegen, dass "/ pub" weggelassen wird:
$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);
Leider gibt es in CLI-Skripten ( bin/magento
) nichts Vergleichbares.
Ich habe die Klasse Magento\Setup\Mvc\Bootstrap\InitParamListener
mit folgendem Code gefunden:
$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);
Ich verstehe jedoch nicht, wo dieser Zend Service Manager die Daten abruft und wie sie möglicherweise beeinflusst werden können.
Mein konkretes Problem ist, dass ein Indexer vollständige URLs generieren muss und dies derzeit dort tut http://magento.local/pub/media/...
, wo ich es brauchehttp://magento.local/media/...
Wie kann ich der CLI mitteilen, dass mein virtueller Host auf pub
URLs verweist und "Pub" nicht Teil von URLs sein sollte?
Im Idealfall sollte dies funktionieren, ohne dass zusätzliche CLI-Parameter oder Umgebungsvariablen erforderlich sind.
--magento-init-params=MAGE_DIRS[media][uri]=media
. Dies funktioniert tatsächlich für alle Befehle (offensichtlich durch Durchlaufen des Codes), aber Befehle außerhalb dessetup:
Namespace geben fälschlicherweise den Fehler aus, dass die Option nicht vorhanden ist.Antworten:
Nach langem Hin und Her habe ich eine Lösung mit Umgebungsvariablen gefunden, von der ich weiß, dass sie nicht Ihren Wünschen entspricht. Sie können die Parameter mithilfe folgender Umgebungsvariablen festlegen (durch
$APP_ROOT
Ihre eigentliche Magento-Wurzel ersetzen ):Beachten Sie, dass der Basispfad wie oben angegeben werden muss, da Ihre
MAGE_DIRS
Definition bei Verwendung von Umgebungsvariablen den anfänglichen Standard überschreibt, der diesen enthält. Es wird jedoch mit der vollständigeren Standardkonfiguration in zusammengeführt\Magento\Framework\App\Filesystem\DirectoryList
.Wir danken dieser Antwort des Chefarchitekten selbst dafür, dass er mich auf den Duft gebracht hat:
Wie ändere ich das "var" -Verzeichnis von Magento an einen anderen Ort in Magento 2?
quelle
env
im Format werdenFOO=bar
in diesem Fall am Ende als Umgebungsvariablen für den Befehl festgelegtbin/magento
).indexer:reindex
durchcron:run
(und aktualisieren Sie natürlich auch $ APP_ROOT). Dann lassen Sie das Ganze in die Crontab fallen. Sie sind sich nicht sicher, ob crontab die Zeilenumbrüche mag, daher können Sie sie einfach durch Leerzeichen ersetzen (in diesem Fall entfernen Sie die nachgestellten Backslashes).Eine andere, einfachere Option besteht darin, den Medienpfad in der Geschäftskonfiguration unter Stores> Configuration> Web to: fest zu codieren:
und
Gutschrift an https://github.com/magento/magento2/issues/9111#issuecomment-292002922
quelle
Ich habe einen anderen Weg gefunden, um
MAGE_DIRS
über CLI einzustellen , einfach kopierenzu
Und jetzt können Sie das Standardverzeichnis aller internen Dateien ändern.
quelle