Artisan и Tinker: командная строка Laravel

Artisan — командная строка Laravel, а Tinker — интерактивная оболочка: вместе они ускоряют разработку, генерируя код и позволяя «потрогать» приложение вживую.

Суть: php artisan запускает встроенные команды (генерация классов, миграции, кэш), а php artisan tinker открывает REPL, где можно выполнять любой код приложения прямо в терминале.

Laravel поставляется с мощным консольным помощником — Artisan. Это «пульт управления» проектом: вместо ручного создания файлов вы генерируете контроллеры, модели и миграции одной командой, запускаете миграции, чистите кэш, смотрите список маршрутов. Каждая команда экономит минуты и гарантирует правильную структуру файлов.

Рядом живёт Tinker — интерактивная оболочка (REPL). Она загружает всё ваше приложение и даёт командную строку, где можно выполнять PHP-код в контексте проекта: создавать записи, выполнять запросы Eloquent, проверять логику — без написания контроллера и открытия браузера. Это незаменимый инструмент для экспериментов и отладки.

Полезные команды Artisan

# список всех команд
php artisan list

# генераторы кода
php artisan make:controller ProductController
php artisan make:model Product -m       # модель + миграция
php artisan make:request StoreProductRequest

# база данных
php artisan migrate                      # применить миграции
php artisan db:seed                      # наполнить данными

# обслуживание
php artisan route:list                   # все маршруты
php artisan cache:clear                  # очистить кэш
php artisan config:clear                 # сбросить кэш конфигурации

Интерактивная оболочка Tinker

php artisan tinker
<?php
// внутри tinker — работаем с приложением вживую
>>> User::count();
=> 42

>>> $u = User::find(1);
>>> $u->name;
=> "Анна"

>>> Product::create(['name' => 'Тест', 'price' => 100]);
>>> Product::where('price', '<', 500)->get();

Как работает под капотом

Команды Artisan — это PHP-классы, которые регистрируются автоматически и определены в routes/console.php (в Laravel 11 туда же переехало расписание задач). Когда вы пишете php artisan make:model, фреймворк находит нужную команду и выполняет её метод handle(). Tinker под капотом запускает оболочку PsySH, предварительно загрузив контейнер приложения — поэтому внутри доступны все ваши модели, фасады и хелперы.

  php artisan <command> [аргументы]
        |
        v
  загрузка приложения (bootstrap/app.php)
        |
        v
  поиск команды по имени
        |
        v
  выполнение handle() -> вывод в терминал

  tinker = тот же bootstrap + REPL поверх приложения

Смоделируем диспетчер консольных команд на Python — как Artisan находит и запускает команду по имени.

Попробуй сам ▶

# Мини-Artisan: имя команды -> обработчик
def make_model(name):  return f'Создан класс App/Models/{name}'
def migrate():         return 'Применены миграции'
def route_list():      return 'GET /  GET /products  POST /products'

commands = {
    'make:model': make_model,
    'migrate':    migrate,
    'route:list': route_list,
}

def artisan(name, *args):
    handler = commands.get(name)
    if handler is None:
        return f'Command "{name}" is not defined.'
    return handler(*args)

print(artisan('make:model', 'Product'))
print(artisan('migrate'))
print(artisan('unknown'))

Частые ошибки

  • Создавать файлы вручную. Ручной класс легко сделать с опечаткой в namespace; генераторы Artisan безопаснее.
  • Менять данные в Tinker на проде. Tinker работает с реальной базой текущего окружения — на проде это опасно.
  • Забывать про кэш конфигурации. После правки .env иногда нужно config:clear, иначе старые значения «залипают».

Best practices

  • Изучите генераторы make:* — они создают файлы по соглашениям фреймворка.
  • Используйте Tinker для быстрых проверок логики вместо временных маршрутов.
  • Свои команды создавайте через make:command и регистрируйте в routes/console.php.

Artisan легко расширяется собственными командами — это удобно для регулярных задач обслуживания: пересчёта статистики, рассылки, импорта. Команду создают через php artisan make:command SendDigest, задают её сигнатуру (имя и аргументы) и пишут логику в методе handle(). В Laravel 11 такие команды и их расписание регистрируют в файле routes/console.php: например, Schedule::command('app:send-digest')->dailyAt('09:00') заставит команду выполняться каждое утро. Сам планировщик запускается одной cron-записью на сервере, а Laravel внутри сам решает, какие задачи пора выполнить. Tinker, в свою очередь, незаменим не только для экспериментов, но и для разовых операций в проде через защищённую консоль — поправить флаг у записи, пересчитать значение. Главное — помнить, что обе среды работают с реальной базой текущего окружения, поэтому к командам на боевом сервере относятся с тем же вниманием, что и к миграциям.

Итог: Artisan ускоряет рутину генерацией кода и обслуживанием, а Tinker даёт живую песочницу поверх приложения. Дальше разберём, как запрос находит свой код через маршруты.

Проверьте себя
1. Что делает команда php artisan tinker?
AЗапускает веб-сервер
BОткрывает интерактивную оболочку (REPL) с загруженным приложением
CУдаляет базу
DСоздаёт миграцию
2. Зачем нужны команды make:* в Artisan?
AЧтобы удалять файлы
BГенерировать классы (модели, контроллеры) по соглашениям фреймворка
CЗапускать тесты в браузере
DМенять пароль БД