
Перейменування теки public в Laravel 5
17.04.2018 23:04 | Laravel
Інколи треба перейменувати теку public
– особисто я зіштовхнувся з цією проблемою, коли викладав проекти на хостинг. Звісно, якщо просто змінити назву директорії, отримаємо помилку. Припустимо, що новою назвою має бути www
. Щоб все запрацювало, треба виконати наступні дії:
- Перейменувати теку
public
наwww
- У файлі
server.php
в корні проекту підкоригувати рядки 17-21:if ($uri !== '/' && file_exists(__DIR__.'/www'.$uri)) { return false; } require_once __DIR__.'/www/index.php';
- В методі
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');
На цьому все - проблема вирішена.