Laravel 5 изменить общедоступный путь()
Я пытаюсь переместить папку public
в другое место. Однако я не могу найти место для изменения переменной public_path()
. Теперь "public_path()" возвращает неверный путь к папке.
Где я могу установить переменную для public_path()
?
5 answers
Вы можете переопределить общедоступный путь с помощью контейнера 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
{
}
Поздравляю! Вы расширили класс основного приложения Laravel.
Шаг 3: Перезапишите метод publicPath
. Скопируйте и вставьте оригинальный метод Laravel в ваш новый класс и измените его в соответствии с вашими потребностями. В моем конкретном случае мне понравилось следующее:
public function publicPath()
{
return $this->basePath.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public_html';
}
Вот и все! Вы можете перезаписать любой метод в классе приложения одинаково путь.
Я предлагаю вам добавить его в app/Providers/AppServiceProvider.php
:
public function register()
{
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
}
Это также влияет на artisan
.
$app->bind('path.public', function() {
return base_path().'/mynewpublic';
});
В laravel 5.6 эта работа для меня... добавление этого кода в bootstrap/app.php :
$app->bind('path.public', function() {
return realpath(__DIR__.'/../');
});
Где __РЕЖ.__.'/../' является ли путь к вашей общей папке