Перейменування теки 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';
            });
        }
    }

 

В одномe з проектів – версія 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');

 

На цьому все - проблема вирішена.