Я пытаюсь переместить public
папку в другое место. Однако я не могу найти место для изменения переменной public_path()
. Теперь «public_path ()» возвращает неверный путь к папке.
Где я могу установить переменную для public_path()
?
Вы можете переопределить общедоступный путь с помощью контейнера ioc:
То, что работало для меня безупречно, добавляло в public/index.php
следующие три строки:
$app->bind('path.public', function() { return __DIR__; });
Для более подробного объяснения нажмите здесь
Хотя принятый ответ работает на запросы, поступающие от HTTP, он не будет работать для artisan
.
Если вам нужен artisan
чтобы узнать свой собственный общедоступный путь, вам необходимо расширить основной класс приложения Laravel. Я знаю, это звучит страшно, но на самом деле это очень просто.
Все, что вам нужно сделать, это:
Шаг 1. В файле: bootstrap/app.php
измените самое первое объявление переменной $app
$app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../') );
чтобы отразить ваш собственный класс приложений:
$app = new App\Application( realpath(__DIR__.'/../') );
Шаг 2. Определите свой собственный класс приложений. Например, в app/Application.php
<?php namespace App; class Application extends \Illuminate\Foundation\Application { }
Congrats! У вас расширен класс ядра Laravel.
Шаг 3: Перезапишите метод publicPath
. Скопируйте и вставьте Laravel оригинальный метод в свой новый класс и измените его на свои нужды. В моем конкретном случае мне это понравилось:
public function publicPath() { return $this->basePath.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public_html'; }
Это оно! Вы можете переписать любой метод в классе приложений таким же образом.
$app->bind('path.public', function() { return base_path().'/mynewpublic'; });