Laravel 5 на общем хостинге – неправильный public_path ()

Я развернул проект Laravel 5 на общую учетную запись хостинга, разместив файлы приложения вне www-папки, разместив только общую папку внутри www-папки. Все, как описано здесь, в лучшем ответе: Laravel 4 и способ развертывания приложения с использованием FTP … без 3. потому что этот файл не существует в Laravel 5.

Теперь, когда я вызываю public_path () внутри контроллера, я получаю что-то вроде my-appfiles-outside-of-www / public вместо www / public . Кто-нибудь знает, почему у меня нет правильного пути здесь? Могу ли я это изменить? Благодаря!

Вы можете переопределить public_path с помощью контейнера. Пример:

App::bind('path.public', function() { return base_path().'/public_html'; }); 

Существует ряд решений, таких как изменение index.php или принятое с контейнером ioc.

Решение, которое работает лучше всего, на мой взгляд, описано в этом вопросе SO: Laravel 5 change public_path ()

Почему это лучше, чем другие решения? Потому что он работает для обычного запроса http, использования ремесленника и использования phpunit для тестирования! Например, изменение index.php работает только для HTTP-запросов, но приводит к ошибкам при использовании PHPunit (в моем случае: файл (…), не определенный в манифесте актива ).

Краткое описание этого решения: Шаг 1: В файле: bootstrap / app.php измените самое первое объявление переменной $ app:

 $app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../') ); 

чтобы:

 $app = new App\Application( realpath(__DIR__.'/../') ); 

Это указывает на собственный собственный класс приложений, который мы создадим на шаге 2.

Шаг 2. Создайте файл Application.php в папке приложения:

 <?php namespace App; class Application extends \Illuminate\Foundation\Application { public function publicPath() { return $this->basePath . '/../public_html'; } } 

Не забудьте изменить путь к вашим потребностям. В этом примере предполагается структура каталогов:
оо laravel_app
приложение
°°°° самозагрузки
°°°° конфигурации
°°°° …
оо public_html

В случае ОП путь должен, вероятно, быть

 return $this->basePath . '/../www/public'; 

(вверх от laravel_app, затем вниз в www / public)