W: pub/index.php
następujący kod służy do ustawienia adresów URL zmian zasobów multimedialnych i statycznych w celu pominięcia „/ 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);
Niestety w skryptach CLI ( bin/magento
) nie ma czegoś takiego.
Znalazłem klasę Magento\Setup\Mvc\Bootstrap\InitParamListener
z następującym kodem:
$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);
Ale nie rozumiem, skąd ten Zend Service Manager pobiera dane i jak można na nie wpłynąć.
Moim konkretnym problemem jest to, że indeksator musi generować pełne adresy URL i obecnie robi to http://magento.local/pub/media/...
, tam gdzie jest to potrzebnehttp://magento.local/media/...
Jak mogę powiedzieć CLI, że mój wirtualny host wskazuje pub
i „pub” nie powinien być częścią adresów URL?
Idealnie powinno to działać bez konieczności polegania na dodatkowych parametrach CLI lub zmiennych środowiskowych.
--magento-init-params=MAGE_DIRS[media][uri]=media
. W rzeczywistości działa to dla wszystkich poleceń (oczywiste, przechodząc przez kod), ale polecenia spozasetup:
przestrzeni nazw niepoprawnie dają błąd, że opcja nie istnieje.Odpowiedzi:
Po wielu trudach znalazłem rozwiązanie wykorzystujące zmienne środowiskowe, o których wiem, że nie jest to, czego chciałeś. Możesz ustawić parametry za pomocą zmiennych środowiskowych takich jak ten (zamieniając
$APP_ROOT
na rzeczywisty katalog główny Magento):Zauważ, że konieczne jest określenie ścieżki podstawowej jak wyżej, ponieważ kiedy używasz zmiennych środowiskowych, twoja
MAGE_DIRS
definicja zastępuje początkową wartość domyślną, która ją zawiera. Zostanie on jednak scalony z pełniejszą domyślną konfiguracją w\Magento\Framework\App\Filesystem\DirectoryList
.Podziękowania dla tej odpowiedzi od samego architekta za wprowadzenie mnie w zapach:
Jak zmienić katalog „var” Magento na inne miejsce w Magento 2?
źródło
env
w formacieFOO=bar
są ustawiane jako zmienne środowiskowe dla polecenia na końcu, w tym przypadkubin/magento
).indexer:reindex
zcron:run
(i ciągle aktualizować $ APP_ROOT też oczywiście). Następnie upuść całą tę rzecz na crontab. Nie jestem pewien, czy crontab spodoba się nowym wierszom, więc możesz po prostu zastąpić je spacjami (w tym przypadku usuwając końcowe ukośniki odwrotne).Inną, prostszą opcją jest po prostu zakodowanie ścieżki multimediów w konfiguracji sklepu w obszarze Sklepy> Konfiguracja> Internet, aby:
i
Należny kredyt https://github.com/magento/magento2/issues/9111#issuecomment-292002922
źródło
Znalazłem inny sposób na ustawienie
MAGE_DIRS
za pomocą CLI, wystarczy skopiowaćdo
A teraz możesz zmienić domyślny katalog wszystkich wewnętrznych plików.
źródło