Skip to content

4.1. Консоль Artisan

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
lightbulb

Ищете функцию горячей перезагрузки, многострочное редактирование кода и автодополнение при работе с вашим приложением 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"
exclamation

Функция-хелпер 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')));
}
}
lightbulb

Для облегчения повторного использования кода рекомендуется делать ваши консольные команды максимально легкими, передавая выполнение задач сервисам приложения. В приведенном выше примере обратите внимание, что мы внедряем сервисный класс для выполнения основной задачи отправки электронных писем.

2.2.1. Коды выхода