Питання на співбесіду PHP Laravel Developer 2026: Повний посібник з підготовки
Комплексний посібник з технічних питань на співбесіду для PHP Laravel розробників у 2026 році. Охоплює Eloquent ORM, Service Container, авторизацію, черги та тестування.

Питання на співбесіді для PHP Laravel розробників перевіряють як знання фреймворку, так і принципи проектування програмного забезпечення. Laravel 13, випущений у березні 2026 року, представив AI SDK, PHP Attributes та автентифікацію Passkey. Тому інтерв'юери очікують від кандидатів знання як актуальних функцій, так і базових механізмів фреймворку.
Співбесіди з Laravel зазвичай охоплюють п'ять основних напрямків: зв'язки Eloquent ORM та продуктивність, Service Container та впровадження залежностей, патерни автентифікації та авторизації, обробка черг і завдань, а також стратегії тестування. Для старших позицій додатково потрібні знання архітектурних рішень та екосистеми пакетів.
Eloquent ORM та питання про бази даних
Eloquent залишається найбільш обговорюваною темою на співбесідах з Laravel. Інтерв'юери оцінюють, чи розуміють кандидати різницю між lazy loading та eager loading, типи зв'язків та оптимізацію запитів.
П: Що таке проблема N+1 і як Laravel її вирішує?
Проблема N+1 виникає, коли код виконує один запит для отримання колекції, а потім N додаткових запитів для завантаження пов'язаних даних для кожного елемента. Laravel вирішує це за допомогою eager loading через метод with().
// Проблема N+1: 1 запит для постів + N запитів для авторів
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name; // Викликає запит для кожного поста
}
// Рішення: Eager loading з with()
$posts = Post::with('author')->get(); // Всього 2 запити
foreach ($posts as $post) {
echo $post->author->name; // Жодних додаткових запитів
}Laravel 13 підтримує строгий режим у середовищі розробки, який викидає виняток при lazy loading, допомагаючи виявити проблеми N+1 на ранній стадії.
П: Поясніть різницю між hasOne, hasMany, belongsTo та belongsToMany.
| Зв'язок | Розташування зовнішнього ключа | Приклад |
|---|---|---|
| hasOne | У пов'язаній моделі | User hasOne Profile (profiles.user_id) |
| hasMany | У пов'язаній моделі | User hasMany Posts (posts.user_id) |
| belongsTo | У поточній моделі | Post belongsTo User (posts.user_id) |
| belongsToMany | Pivot таблиця | User belongsToMany Roles (таблиця role_user) |
П: Як працювати з soft deletes і які наслідки?
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
// Soft-deleted записи виключаються за замовчуванням
// Щоб включити їх:
// Post::withTrashed()->get();
// Щоб отримати лише видалені:
// Post::onlyTrashed()->get();
}Soft deletes додають колонку deleted_at. Запити автоматично виключають soft-deleted записи, якщо явно не вказано інше. Це впливає на обмеження унікальності та вимагає складених індексів, що включають deleted_at, для оптимальної продуктивності.
Service Container та впровадження залежностей
Service Container є ядром Laravel. Розуміння binding, resolution та контекстного впровадження відрізняє juniors від seniors.
П: Що таке Service Container і чому він важливий?
Service Container — це потужний інструмент для управління залежностями класів та виконання впровадження залежностей. Він автоматично розв'язує залежності за допомогою PHP reflection, усуваючи потребу в ручному створенні екземплярів.
public function register(): void
{
// Простий binding
$this->app->bind(PaymentGateway::class, StripeGateway::class);
// Singleton - той самий екземпляр кожного разу
$this->app->singleton(CacheManager::class, function ($app) {
return new CacheManager($app['config']['cache']);
});
// Контекстний binding
$this->app->when(PhotoController::class)
->needs(Filesystem::class)
->give(function () {
return Storage::disk('photos');
});
}П: Яка різниця між bind(), singleton() та instance()?
| Метод | Поведінка | Випадок використання |
|---|---|---|
| bind() | Новий екземпляр при кожному розв'язанні | Об'єкти зі станом, HTTP запити |
| singleton() | Той самий екземпляр у всьому застосунку | Менеджери кешу, з'єднання |
| instance() | Прив'язка існуючого екземпляра | Тестування, mock об'єкти |
Автентифікація та авторизація
Laravel 13 представляє нативну підтримку Passkey поряд з традиційними методами автентифікації. Кандидати повинні розуміти як нові, так і класичні підходи.
П: Поясніть різницю між автентифікацією та авторизацією в Laravel.
Автентифікація перевіряє особу користувача (хто це), тоді як авторизація визначає дозволи (що може робити). Laravel розділяє ці концепції: Guards керують автентифікацією, а Gates та Policies керують авторизацією.
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id
|| $user->hasRole('editor');
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id
|| $user->hasRole('admin');
}
}
// Використання в контролері
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// Продовжуємо оновлення...
}П: Коли використовувати Gates vs Policies?
Gates найкраще підходять для простих перевірок авторизації, не пов'язаних з конкретними моделями. Policies групують логіку авторизації навколо моделей, забезпечуючи чистішу організацію для CRUD операцій.
Gate::define('access-admin', function (User $user) {
return $user->is_admin || $user->hasRole('super-admin');
});
// Використання
if (Gate::allows('access-admin')) {
// Показати адмін панель
}Черги та обробка завдань
Фонова обробка необхідна для масштабованих застосунків. Інтерв'юери перевіряють розуміння конфігурації черг, обробки помилок та патернів повторних спроб.
П: Як працюють черги Laravel і коли їх використовувати?
Черги відкладають ресурсоємні завдання для подальшої обробки. Типові випадки використання включають відправку email, обробку зображень та API виклики.
class ProcessPodcast implements ShouldQueue
{
use Queueable;
public int $tries = 3;
public int $backoff = 60; // секунди між спробами
public int $timeout = 300; // максимальний час виконання
public function __construct(
public Podcast $podcast
) {}
public function handle(AudioProcessor $processor): void
{
$processor->process($this->podcast->audio_path);
}
public function failed(Throwable $exception): void
{
// Повідомити адміністратора про невдачу
Log::error('Обробка подкасту невдала', [
'podcast_id' => $this->podcast->id,
'error' => $exception->getMessage()
]);
}
}
// Відправка завдання
ProcessPodcast::dispatch($podcast)->onQueue('audio');П: Поясніть job batching та job chaining.
Job batching групує кілька завдань і виконує callbacks після їх завершення. Job chaining виконує завдання послідовно, зупиняючись при невдачах.
// Job batching
Bus::batch([
new ProcessPodcast($podcast1),
new ProcessPodcast($podcast2),
new ProcessPodcast($podcast3),
])->then(function (Batch $batch) {
// Всі завдання успішно завершені
})->catch(function (Batch $batch, Throwable $e) {
// Обробка першої невдачі
})->finally(function (Batch $batch) {
// Batch завершено (успішно або з помилкою)
})->dispatch();
// Job chaining
Bus::chain([
new DownloadPodcast($url),
new ProcessAudio($podcast),
new PublishPodcast($podcast),
])->dispatch();Тестування в Laravel
Тестування демонструє інженерну зрілість. Laravel надає багаті інструменти тестування, і кандидати повинні розуміти unit, feature та integration тести.
П: Яка різниця між Feature та Unit тестами в Laravel?
Unit тести тестують ізольовані класи без фреймворку. Feature тести тестують повні HTTP запити, завантажуючи повний Laravel застосунок.
class PricingServiceTest extends TestCase
{
public function test_calculates_discount_correctly(): void
{
$service = new PricingService();
$result = $service->calculateDiscount(100, 0.2);
$this->assertEquals(80, $result);
}
}
// tests/Feature/Http/Controllers/PostControllerTest.php
class PostControllerTest extends TestCase
{
use RefreshDatabase;
public function test_user_can_create_post(): void
{
$user = User::factory()->create();
$response = $this->actingAs($user)
->post('/posts', [
'title' => 'Мій пост',
'content' => 'Вміст посту'
]);
$response->assertRedirect('/posts');
$this->assertDatabaseHas('posts', [
'title' => 'Мій пост',
'user_id' => $user->id
]);
}
}П: Як тестувати завдання черги?
use Illuminate\Support\Facades\Queue;
public function test_podcast_processing_job_is_dispatched(): void
{
Queue::fake();
$podcast = Podcast::factory()->create();
// Дія, що викликає завдання
$this->post("/podcasts/{$podcast->id}/process");
// Assertions
Queue::assertPushed(ProcessPodcast::class, function ($job) use ($podcast) {
return $job->podcast->id === $podcast->id;
});
Queue::assertPushedOn('audio', ProcessPodcast::class);
}Готовий до співбесід з Laravel?
Практикуйся з нашими інтерактивними симуляторами, flashcards та технічними тестами.
Розширені архітектурні теми
Старші позиції вимагають архітектурних знань, що виходять за межі основ фреймворку.
П: Коли використовувати патерн Repository в Laravel?
Патерн Repository абстрагує шар доступу до даних. Його варто розглянути, коли застосунок може змінити базу даних, потребує складних запитів у кількох місцях або вимагає легкого mocking у тестах.
interface PostRepositoryInterface
{
public function findPublished(): Collection;
public function findByAuthor(User $author): Collection;
}
class EloquentPostRepository implements PostRepositoryInterface
{
public function findPublished(): Collection
{
return Post::where('status', 'published')
->with('author')
->orderByDesc('published_at')
->get();
}
public function findByAuthor(User $author): Collection
{
return Post::where('user_id', $author->id)
->with('tags')
->get();
}
}П: Поясніть патерн Action в Laravel.
Action — це окремий клас, відповідальний за одне бізнес-завдання. Забезпечує кращу тестованість та повторне використання, ніж розміщення логіки в контролерах.
class CreateOrder
{
public function __construct(
private PaymentGateway $gateway,
private OrderRepository $orders
) {}
public function execute(User $user, Cart $cart): Order
{
$payment = $this->gateway->charge(
$user,
$cart->total()
);
$order = $this->orders->create([
'user_id' => $user->id,
'payment_id' => $payment->id,
'items' => $cart->items(),
'total' => $cart->total()
]);
OrderCreated::dispatch($order);
return $order;
}
}
// Використання в контролері
public function store(Request $request, CreateOrder $action)
{
$order = $action->execute(
$request->user(),
Cart::current()
);
return redirect()->route('orders.show', $order);
}Нововведення Laravel 13
Інтерв'юери часто запитують про найновіші функції, щоб оцінити постійне навчання кандидата.
П: Які ключові функції Laravel 13?
Laravel 13 представляє три основні нововведення: AI SDK для інтеграції з мовними моделями, повну підтримку PHP Attributes для визначення маршрутів та валідації, а також нативну автентифікацію Passkey.
// Інтеграція AI SDK
use Illuminate\AI\Facades\AI;
$response = AI::chat()
->model('gpt-4')
->system('Ви корисний асистент.')
->user('Поясніть Service Container в Laravel.')
->generate();
// PHP Attributes для маршрутів
#[Route('/posts', methods: ['GET'])]
#[Middleware('auth')]
public function index(): View
{
return view('posts.index');
}
// Валідація з Attributes
#[Required]
#[Email]
#[Unique('users', 'email')]
public string $email;Питання для практичної підготовки
На технічних співбесідах часто зустрічаються практичні завдання. Ось приклади типових сценаріїв.
Сценарій 1: Проектування системи сповіщень
Спроектуйте систему, яка підтримує кілька каналів сповіщень (email, SMS, push) з можливістю налаштування користувачем.
Сценарій 2: Реалізація rate limiting API
Реалізуйте обмеження швидкості API запитів з різними лімітами для різних планів підписки.
Сценарій 3: Оптимізація повільних запитів
У вас є endpoint, що повертає список продуктів з категоріями, тегами та відгуками. Час відповіді — 3 секунди. Як його оптимізувати?
Підсумок
Підготовка до співбесіди з PHP Laravel вимагає глибокого розуміння Eloquent ORM, Service Container, патернів авторизації та практик тестування. Кандидати повинні бути готові до демонстрації коду та вирішення архітектурних задач. Знання нововведень Laravel 13 демонструє прихильність до постійного професійного розвитку. Практичні вправи з реальними сценаріями забезпечують найкращу підготовку до технічної частини співбесіди.
Чи знайдеш ти помилку в Laravel?
Справжній фрагмент коду, прихована помилка, одна спроба на день. Щоб спробувати, акаунт не потрібен.

Автор:
Anthony Fillion-MailletЗасновник SharpSkill
Fullstack-розробник понад 10 років. Керує SharpSkill і відповідає за все, що тут публікується.
Оновлено 7 вересня 2026 р.
Теги
Поділитися
Пов'язані статті

Laravel 12 у 2026 році: нові можливості, Starter Kits та питання для співбесіди
Повний огляд Laravel 12: перероблені Starter Kits на основі React 19, Vue 3, Svelte 5 та Livewire 4, інтеграція WorkOS AuthKit, оновлення залежностей до Carbon 3 та PHP 8.2+, покроковий посібник з оновлення з Laravel 11 та актуальні питання для технічних співбесід у 2026 році.

Рішення Laravel: Розширені Патерни, Налагодження та Питання на Співбесіді 2026
Комплексний посібник з розширених архітектурних патернів Laravel, технік налагодження з Telescope та найпоширеніших питань на співбесідах для розробників Laravel.

Тестування Laravel з Pest 5 у 2026: TIA, Mocking та питання співбесід
Опануйте найкращі практики тестування Laravel з Pest 5, Test Impact Analysis, Mockery, facade fakes та архітектурними тестами. Охоплює unit-тести, feature-тести, стратегії мокінгу та типові питання співбесід для Laravel-розробників.