Переименование папки public в Laravel 5

Переименование папки public в Laravel 5

Иногда требуется переименовать папку public – лично я столкнулся с этой проблемой, когда выкладывал проекты на хостинг. Естественно, если просто изменить название директории, получим ошибку. Предположим, что новым названием должно быть www. Чтобы всё заработало, надо выполнить следующие действия:

  1. Переименовать папку public на www
  2. В файле server.php в корне проекта подкорректировать строки 17-21:
    if ($uri !== '/' && file_exists(__DIR__.'/www'.$uri)) {
        return false;
    }
    
    require_once __DIR__.'/www/index.php';
  3. В методе register() класса AppServiceProvider «привязать» новый путь:
    class AppServiceProvider extends ServiceProvider
    {
        ...
    
        public function register()
        {
            $this->app->bind('path.public', function() {
                return base_path().'/www';
            });
        }
    }

 

В одном из проектов – версия Laravel 5.5.26 – даже после вышеописанных манипуляций всё равно в консоли вылетала ошибка:

ServeCommand.php line 35
chdir(): No such file or directory

 

Хотя за правку файлов фреймворка надо бить по рукам чуть чаще, чем всегда, но в этом случае можно просто взять эту самую 35 строку из ServeCommand.php более поздней версии (в моём случае Laravel 5.5.40) и заменить. Т.е. вместо:

public function handle()
{
    chdir($this->laravel->publicPath());
    ...
}

Получим:

public function handle()
{
    chdir(public_path());
    ...
}

 

Последний штрих – компиляция ассетов. Для этого зайдём в yourproject/webpack.mix.js, и изменим код следующим образом:

mix.setPublicPath('www');
mix.js('resources/assets/js/app.js', 'www/js')
   .sass('resources/assets/sass/app.scss', 'www/css');

 

На этом всё - проблема решена.