Laravel 5 изменить 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'; });