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 даёт живую песочницу поверх приложения. Дальше разберём, как запрос находит свой код через маршруты.