Я пытаюсь переместить папку public
в другое место. Однако я не могу найти место для изменения переменной public_path()
. Теперь "public_path()" возвращает неверный путь к папке.
Где я могу установить переменную для public_path()
?
Я пытаюсь переместить папку 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';
});