Я пытаюсь переместить 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'; });