4.1. Консоль Artisan
- 1. Введение
- 2. Создание команд
- Defining Input Expectations
- Command I/O
- Registering Commands
- Programmatically Executing Commands
- Signal Handling
- Stub Customization
- Events
1. Введение
Artisan — это инструмент командной строки, включенный в Laravel. Artisan находится в корневом каталоге вашего
приложения в виде скрипта artisan
и предоставляет ряд полезных команд, которые могут помочь вам в
процессе разработки приложения. Чтобы увидеть список всех доступных команд Artisan, вы можете использовать команду
list
:
php artisan list
Каждая команда также включает "справочную информацию", которая отображает и описывает доступные аргументы и
параметры команды. Чтобы увидеть справку, укажите перед именем команды help
:
php artisan help migrate
Laravel Sail
Если вы используете Laravel Sail в качестве локальной среды разработки, не забудьте
использовать команду sail
для вызова команд Artisan. Sail выполнит ваши команды Artisan внутри
Docker-контейнеров вашего приложения:
./vendor/bin/sail artisan list
1.1. Tinker (REPL)
Laravel Tinker — это мощная интерактивная консоль (REPL) для фреймворка Laravel, работающая на основе пакета PsySH.
1.1.1. Установка
Все приложения Laravel включают Tinker по умолчанию. Однако, если вы ранее удалили его из своего приложения, вы можете установить Tinker с помощью Composer:
composer require laravel/tinker
Ищете функцию горячей перезагрузки, многострочное редактирование кода и автодополнение при работе с вашим приложением Laravel? Обратите внимание на Tinkerwell!
1.1.2. Использование
Tinker позволяет взаимодействовать с вашим Laravel-приложением через командную строку, включая модели Eloquent,
задачи, события и многое другое. Чтобы войти в среду Tinker, выполните Artisan-команду tinker
:
php artisan tinker
Вы можете опубликовать файл конфигурации Tinker с помощью команды vendor:publish
:
php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"
Функция-хелпер dispatch
и метод dispatch
класса Dispatchable
зависят от
сборщика мусора для помещения задачи в очередь. Поэтому при использовании Tinker следует использовать
Bus::dispatch
или Queue::push
для отправки задач.
1.1.3. Список разрешенных команд
Tinker использует "список разрешенных команд" для определения, какие команды Artisan можно выполнять
в его оболочке. По умолчанию доступны команды clear-compiled
, down
, env
,
inspire
, migrate
, migrate:install
, up
и optimize
.
Если вы хотите разрешить дополнительные команды, вы можете добавить их в массив commands
в вашем
файле конфигурации tinker.php
:
'commands' => [ // App\Console\Commands\ExampleCommand::class,],
1.1.4. Классы, которые не должны быть алиасами
Обычно Tinker автоматически создает алиасы для классов, с которыми вы взаимодействуете в его оболочке. Однако вы
можете захотеть исключить некоторые классы из алиасов. Это можно сделать, указав их в массиве
dont_alias
файла конфигурации tinker.php
:
'dont_alias' => [ App\Models\User::class,],
2. Создание команд
В дополнение к командам, предоставляемым Artisan, вы можете создавать собственные команды. Обычно команды
хранятся в каталоге app/Console/Commands
; однако вы можете выбрать любое другое место хранения, если
ваши команды могут быть загружены с помощью Composer.
2.1. Создание команд
Для создания новой команды вы можете использовать Artisan-команду make:command
. Эта команда создаст
новый класс команды в каталоге app/Console/Commands
. Не беспокойтесь, если этот каталог отсутствует в
вашем приложении — он будет создан при первом выполнении Artisan-команды make:command
:
php artisan make:command SendEmails
2.2. Структура команды
После создания команды вы должны задать соответствующие значения для свойств signature
и
description
класса. Эти свойства будут использоваться при отображении вашей команды на экране
list
. Свойство signature
также позволяет определить ожидаемые входные данные вашей команды. Метод handle
будет
вызываться при выполнении вашей команды. Вы можете разместить логику команды в этом методе.
Рассмотрим пример команды. Обратите внимание, что мы можем запрашивать любые необходимые зависимости через метод
handle
команды. Сервис-контейнер Laravel автоматически внедрит
все зависимости, указанные в сигнатуре этого метода с помощью type-hint:
<?php namespace App\Console\Commands; use App\Models\User;use App\Support\DripEmailer;use Illuminate\Console\Command; class SendEmails extends Command{ /** * The name and signature of the console command. * * @var string */ protected $signature = 'mail:send {user}'; /** * The console command description. * * @var string */ protected $description = 'Send a marketing email to a user'; /** * Execute the console command. */ public function handle(DripEmailer $drip): void { $drip->send(User::find($this->argument('user'))); }}
Для облегчения повторного использования кода рекомендуется делать ваши консольные команды максимально легкими, передавая выполнение задач сервисам приложения. В приведенном выше примере обратите внимание, что мы внедряем сервисный класс для выполнения основной задачи отправки электронных писем.