Питання на співбесіді: Artisan
Найпопулярніші питання з реальних Laravel/PHP співбесід для всіх рівнів
3 питання
Контролер - це клас, що групує логіку обробки запитів. Створюють його генератором Artisan; файл з'являється в app/Http/Controllers.
php artisan make:controller PostController # порожній
php artisan make:controller PostController --resource # 7 CRUD-методів
php artisan make:controller PostController --model=Post # з type-hint моделі
php artisan make:controller Api/PostController --api # без create/edit
php artisan make:controller PhotoController --invokable # один метод __invoke
Згенерований resource-контролер містить методи, що відповідають RESTful-конвенції:
class PostController extends Controller
{
public function index() {} // GET /posts
public function create() {} // GET /posts/create
public function store(Request $request) {} // POST /posts
public function show(Post $post) {} // GET /posts/{post}
public function edit(Post $post) {} // GET /posts/{post}/edit
public function update(Request $request, Post $post) {} // PUT/PATCH
public function destroy(Post $post) {} // DELETE
}
Прапорець --resource поєднується з Route::resource('posts', PostController::class), яка реєструє всі ці маршрути одним рядком.
Artisan - CLI Laravel. Він прискорює рутину: генерацію класів, міграції, очищення кешу, запуск черг тощо.
php artisan list # усі команди
php artisan make:model Post -mfsc # модель + міграція, фабрика, сидер, контролер
php artisan migrate
php artisan queue:work
php artisan tinker # інтерактивна REPL-консоль
Під капотом Artisan побудований на Symfony Console. Можна писати власні команди через make:command.
Згенерувати клас і описати логіку в handle():
php artisan make:command SendReports
class SendReports extends Command
{
protected $signature = 'reports:send {--month=}';
protected $description = 'Розіслати місячні звіти';
public function handle(): int
{
$this->info('Відправка...');
return self::SUCCESS;
}
}
Аргументи й опції описуються в $signature. Команду можна запускати вручну або ставити в розклад через Schedule::command('reports:send')->monthly().