Этот пост — Шпаргалка по Laravel 8. Как установить и настроить. Плюс настройка проекта в PhpStorm >= 2020.
Все операции для Debian >= 9 (логин под root), где УЖЕ установлены PHP >= 7.3 + composer (глобально), NGINX >= 1.14, Node.js >= 15.9 + npm.
Я работаю под Windows (Debian в виртуалке или на удаленном деве), но доступ к проектам прокинут через самбу с юзером www-data. А проекты в деве/проде я синхронизирую через rsync и небольшой скрипт на bash. Поэтому PhpStorm видит проекты как локальные без сервера, но все операции artisan я делаю в консоли виртуалки (putty).
Добавление домена в Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# установлен php >= 7.3, composer глобально, node.js + npm mkdir /home/web/azzrael.tld # Настраиваю nginx # прописываем путь до /home/web/azzrael.tld/public cp /etc/nginx/sites-available/socrepost.ru /etc/nginx/sites-available/azzrael.tld ln -s /etc/nginx/sites-available/azzrael.tld /etc/nginx/sites-enabled/azzrael.tld service nginx restart # в tests.php можно прописать <?php phpinfo() ?> # https://azzrael.tld/test.php nano /home/web/azzrael.tld/public/test.php # тестирую что сайт работает # и удаляю полностью папку сайта rm /home/web/azzrael.tld cd /home/web |
Установка Laravel >= 8
Доки. Должен быть уже установлен глобально composer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
sudo -u www-data composer create-project --prefer-dist laravel/laravel /home/web/azzrael.tld cd /home/web/azzrael.tld # нужно для миграций sudo -u www-data composer require doctrine/dbal # debugbar sudo -u www-data composer require barryvdh/laravel-debugbar --dev # bootstrap, laravel mix + etc. # сейчас из репо ставится bootstrap 4 sudo -u www-data composer require laravel/ui # инициализация пакетов npm sudo -u www-data php artisan ui bootstrap # установка пакетов npm (webpack, bootstrap, scss + etc) npm install # возможно нужно установить # npm install resolve-url-loader@^3.1.2 --save-dev --legacy-peer-deps # если ставили все под www-data chown -R www-data:www-data /root/.npm npm run dev # Если в проекте будут юзеры sudo -u www-data php artisan ui bootstrap --auth npm install && npm run dev # .env прописываю APP_* названия ссылки и т.д. |
Подготовка базы
У меня MySQL 5.7 + PhpMyAdmin. В PMA создаю базу с юзером с collation = utf8mb4_unicode_ci чтобы эмоджишки хранить.
1 2 3 4 5 6 |
# создаю базу с collation = utf8mb4_unicode_ci чтобы эмоджишки хранить # config/database.php удаляю все не нужные connections и редис # .env в DB_CONNECTION mysql прописываю доступы к базе # возможно DB_HOST=localhost # artisan ui bootstrap --auth раньше, если нужно sudo -u www-data php artisan migrate |
Подготовка PhpStorm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# включить плагин https://www.jetbrains.com/help/phpstorm/laravel.html#coding-assistance # установить для PhpStorm автокомплита sudo -u www-data composer require --dev barryvdh/laravel-ide-helper # https://github.com/barryvdh/laravel-ide-helper # config/app.php в раздел providers # Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, sudo -u www-data php artisan clear-compiled sudo -u www-data php artisan ide-helper:generate sudo -u www-data php artisan ide-helper:models sudo -u www-data php artisan ide-helper:meta sudo -u www-data php artisan ide-helper:generate # в composer.json "scripts": { "post-update-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postUpdate", "@php artisan ide-helper:generate", "@php artisan ide-helper:meta" ] }, # это поможет если модели и проч генерить из консоли, # если руками, то нужно будет и руками перегенерить |
Настройка почты в Laravel
На обычный юзерский акк мейлру. Письма могут не доходить без dkim! Лучше использовать сервисы типа Mailgun, но конкретно Mailgun требует привязки карты даже для бесплатного аккаунта.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# .env MAIL_MAILER=smtp MAIL_HOST=smtp.mail.ru MAIL_PORT=465 MAIL_USERNAME=azzraelxxxxx@mail.ru MAIL_PASSWORD=xxx MAIL_ENCRYPTION=ssl # !!!! MAIL_FROM_ADDRESS=azzraelxxxxx@mail.ru MAIL_FROM_NAME="${APP_NAME}" # для проверки уходимости, простой роут Mail::send('emails.test', [], function ($m) { $m->from('azzraelxxxxx@mail.ru', 'Your Application'); $m->to("azzraelxxxxx@mail.ru", "Azzrael") ->subject('Your Reminder!'); }); # Настройки верификации емейла пользователей # https://laravel.com/docs/8.x/verification |
Локальный репозиторий для своих пакетов
Цепляю свой пакет по симлинку и тогда все изменения цепляются сразу, без composer update, но при этом могут быть моменты в автокомплите.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# https://laravel-news.com/developing-laravel-packages-with-local-composer-dependencies # В корне создаем папку репозитория azz_repo # внутри создаем папку пакета helpers и структуру # helpers/src # helpers/src/Helper.php # helpers/src/HelperServiceProvider.php # helpers/composer.json # в composer.json ларки добавляю "repositories": [ { "type": "path", "url": "/home/web/azzrael.tld/azz_repo/azzrael_helper", "symlink": true }, { "type": "path", "url": "/home/web/azzrael.tld/azz_repo/platforms", "symlink": true } ], # и обновить композер sudo -u www-data composer require azzrael/helpers sudo -u www-data composer remove azzrael/jqfu |
Шпаргалка по консоли Laravel (artisan)
Я в консоли под рутом, поэтому все команды исполняю под sudo -u www-data. Если этого не делать то модели/контроллеры будут создаваться под рутом и PhpStorm, который видит проект в шаре самбы под www-data, не сможет вносить изменения в модели/контроллеры, та и вообще рут тут не полезен.
Модели и миграции
1 2 3 4 5 6 |
sudo -u www-data php artisan make:model Buy --migration sudo -u www-data php artisan make:migration change_table sudo -u www-data php artisan migrate # откат https://laravel.com/docs/8.x/migrations#rolling-back-migrations sudo -u www-data php artisan migrate:rollback sudo -u www-data php artisan migrate:rollback --step=5 |
Контроллеры
1 2 |
sudo -u www-data php artisan make:controller CommentController sudo -u www-data php artisan make:controller EdaController --resource |
Создание комманды
Дока.
1 2 |
# создание новой комманды sudo -u www-data php artisan make:command SendEmails |
1 2 3 4 5 6 7 8 9 10 |
# https://laravel.com/docs/8.x/artisan#command-io # аргументы в команде protected $signature = 'cmd:some {entry} {entry2?} {entry3=zzz}'; # получение аргументво $this->argument('user') # интерактив в консоль $this->ask('What is your name?') $this->secret('What is the password?') $this->confirm('Do you wish to continue?') $this->info('The command was successful!') |
Создание фабрики
1 2 3 4 5 |
sudo -u www-data php artisan make:factory UserFactory --model=User # фабрика будет лежать в database/factories sudo -u www-data php artisan tinker User::factory()->count(3)->create() |
Создание правила валидации
1 2 3 4 5 6 7 8 9 10 |
# 1. вариант sudo -u www-data php artisan make:rule SomeRule # в файле App\Rules\SomeRule.php в метод passes делаю валидацию $value # и в валидаторе 'text' => [ "string", new SomeRule ], # 2. в App\Providers\AppServiceProvider в boot добавляю Validator::extend('antispam', function ($attribute, $value, $parameters, $validator) { return is_spam($value); }); |
Полезные сниппеты
Загрузка файлов в Laravel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# https://laravel.com/docs/8.x/filesystem#the-public-disk # 'url' => env('APP_URL').'/images', # слева как будет видна симлинка, # справа - реальный путь относительно /home/web/azzrael.tld/storage 'links' => [ public_path('storage') => storage_path('app/public'), ], sudo -u www-data php artisan storage:link # в форме по загрузке файлов не забудь enctype="multipart/form-data" # а если выбор неск файлов, то <input type="file" class="form-control-file" name="image[]" multiple> # тогда в контроллере foreach ($request->file('image') as $f) { $f->store('images'); } |
Полезные пакеты
1 2 3 4 5 |
# faker - генерация текста, значений и т.п. https://github.com/fzaninotto/Faker sudo -u www-data composer require fzaninotto/faker # генерация пользователей php artisan tinker |