Dalam pub/index.php
, kode berikut digunakan untuk mengatur perubahan URL untuk media dan aset statis untuk menghilangkan "/ 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);
Sayangnya dalam skrip CLI ( bin/magento
) tidak ada yang seperti ini.
Saya menemukan kelas Magento\Setup\Mvc\Bootstrap\InitParamListener
dengan kode berikut:
$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);
Tapi saya tidak mengerti di mana Manajer Layanan Zend ini mengambil data dan bagaimana mungkin untuk memengaruhinya.
Masalah konkret saya adalah bahwa pengindeks harus menghasilkan URL lengkap dan saat ini menyukainya http://magento.local/pub/media/...
, di mana saya membutuhkannyahttp://magento.local/media/...
Bagaimana saya bisa memberi tahu CLI bahwa host virtual saya arahkan ke pub
dan "pub" tidak boleh menjadi bagian dari URL?
Idealnya ini harus bekerja tanpa harus bergantung pada parameter CLI tambahan atau variabel lingkungan.
--magento-init-params=MAGE_DIRS[media][uri]=media
. Ini benar-benar bekerja untuk semua perintah (terbukti dengan melangkah melalui kode), tetapi perintah di luarsetup:
namespace salah memberikan kesalahan bahwa opsi tidak ada.Jawaban:
Setelah banyak kesulitan, saya menemukan solusi menggunakan variabel lingkungan, yang saya tahu bukan yang Anda inginkan. Anda dapat mengatur parameter menggunakan variabel lingkungan seperti ini (mengganti
$APP_ROOT
dengan root Magento Anda yang sebenarnya):Perhatikan bahwa perlu untuk menentukan path dasar seperti di atas karena ketika Anda menggunakan variabel lingkungan,
MAGE_DIRS
definisi Anda menimpa default awal yang mencakup itu. Akan tetapi, ini akan digabung dengan konfigurasi default yang lebih lengkap\Magento\Framework\App\Filesystem\DirectoryList
.Penghargaan atas jawaban ini dari kepala arsitek sendiri karena telah menempatkan saya pada aroma:
Bagaimana cara mengubah direktori "var" Magento ke tempat lain di Magento 2?
sumber
env
dalam formatFOO=bar
diatur sebagai variabel lingkungan untuk perintah di akhir, dalam kasus inibin/magento
).indexer:reindex
dengancron:run
(dan masih memperbarui $ APP_ROOT juga tentunya). Lalu masukkan semua itu ke crontab. Tidak yakin apakah crontab akan menyukai baris baru, jadi Anda bisa menggantinya dengan spasi (menghapus garis miring terbalik dalam kasus itu).Opsi lain yang lebih sederhana adalah dengan meng-hard-path jalur media dalam konfigurasi store di bawah Store> Configuration> Web to:
dan
Kredit jatuh tempo ke https://github.com/magento/magento2/issues/9111#issuecomment-292002922
sumber
Saya menemukan cara lain untuk mengatur
MAGE_DIRS
melalui CLI, cukup salinuntuk
Dan sekarang Anda dapat mengubah direktori default semua file internal.
sumber