Em pub/index.php
, o código a seguir é usado para definir URLs de alteração para mídia e ativos 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);
Infelizmente nos scripts CLI ( bin/magento
) não há nada como isso.
Encontrei a classe Magento\Setup\Mvc\Bootstrap\InitParamListener
com o seguinte código:
$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);
Mas não entendo onde esse Zend Service Manager recupera os dados e como pode ser possível influenciá-los.
Meu problema concreto é que um indexador precisa gerar URLs completos e atualmente gosta http://magento.local/pub/media/...
, onde eu precisohttp://magento.local/media/...
Como posso dizer à CLI que meu host virtual aponta para pub
"pub" e não deve fazer parte dos URLs?
Idealmente, isso deve funcionar sem ter que confiar em parâmetros adicionais da CLI ou variáveis de ambiente.
--magento-init-params=MAGE_DIRS[media][uri]=media
. Na verdade, isso funciona para todos os comandos (evidente ao percorrer o código), mas comandos fora dosetup:
espaço para nome incorretamente dão um erro de que a opção não existe.Respostas:
Depois de muito trabalho, encontrei uma solução usando variáveis de ambiente, que sei que não é o que você queria. Você pode definir os parâmetros usando variáveis de ambiente como esta (substituindo
$APP_ROOT
pela sua raiz Magento atual):Observe que é necessário especificar o caminho base como acima, porque quando você usa variáveis de ambiente, sua
MAGE_DIRS
definição substitui o padrão inicial que inclui isso. No entanto, ele será mesclado com a configuração padrão completa\Magento\Framework\App\Filesystem\DirectoryList
.Agradeço a esta resposta do arquiteto-chefe por me colocar no perfume:
Como mudar o diretório "var" do Magento para outro local no Magento 2?
fonte
env
no formatoFOO=bar
são definidos como variáveis de ambiente para o comando no final, neste casobin/magento
).indexer:reindex
porcron:run
(e ainda atualize $ APP_ROOT, é claro). Em seguida, solte tudo no crontab. Não tenho certeza se o crontab vai gostar das novas linhas, então você pode substituí-las por espaços (removendo as barras invertidas finais nesse caso).Outra opção mais simples é simplesmente codificar o caminho da mídia na configuração da loja em Lojas> Configuração> Web para:
e
Crédito devido a https://github.com/magento/magento2/issues/9111#issuecomment-292002922
fonte
Encontrei outra maneira de configurar
MAGE_DIRS
via CLI, basta copiarpara
E agora você pode alterar o diretório padrão de todos os arquivos internos.
fonte