В pub/index.php
следующем коде используется для установки URL изменений для медиа и статических ресурсов, чтобы опустить "/ 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);
К сожалению, в CLI scripts ( bin/magento
) нет ничего подобного.
Я нашел класс Magento\Setup\Mvc\Bootstrap\InitParamListener
со следующим кодом:
$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);
Но я не понимаю, откуда этот Zend Service Manager извлекает данные и как можно повлиять на них.
Моя конкретная проблема заключается в том, что индексатор должен генерировать полные URL-адреса и в настоящее время делает это так http://magento.local/pub/media/...
, как мне нужно, чтобы это былоhttp://magento.local/media/...
Как я могу сказать CLI, что мой виртуальный хост указывает на то, что pub
«pub» не должно быть частью URL?
В идеале это должно работать без необходимости полагаться на дополнительные параметры CLI или переменные среды.
--magento-init-params=MAGE_DIRS[media][uri]=media
. Это на самом деле работает для всех команд (очевидно, шагая по коду), но команды внеsetup:
пространства имен неправильно выдают ошибку, что опция не существует.Ответы:
После долгих испытаний я нашел решение с использованием переменных среды, которые, как я знаю, не то, что вы хотели. Вы можете установить параметры, используя переменные окружения, как это (заменив их
$APP_ROOT
фактическим корнем Magento):Обратите внимание, что необходимо указать базовый путь, как указано выше, потому что, когда вы используете переменные среды, ваше
MAGE_DIRS
определение перезаписывает исходное значение по умолчанию, которое включает это. Однако он будет объединен с более полной конфигурацией по умолчанию в\Magento\Framework\App\Filesystem\DirectoryList
.Отдайте должное этому ответу самого главного архитектора, который поставил меня на запах
Как изменить каталог "var" в Magento на другое место в Magento 2?
источник
env
в форматеFOO=bar
устанавливаются как переменные среды для команды в концеbin/magento
).indexer:reindex
сcron:run
(и до сих пор обновлять $ APP_ROOT тоже конечно). Тогда бросьте все это в crontab. Не уверен, что crontab понравятся символы новой строки, так что вы можете просто заменить их пробелами (в этом случае удаляете обратную косую черту).Другой, более простой вариант - просто жестко закодировать путь мультимедиа в конфигурации магазина в разделе «Магазины»> «Конфигурация»> «Интернет», чтобы:
а также
Нужно отдать должное https://github.com/magento/magento2/issues/9111#issuecomment-292002922
источник
Я нашел другой способ установить
MAGE_DIRS
через CLI, просто скопируйтев
И теперь вы можете изменить каталог по умолчанию для всех внутренних файлов.
источник