Питання на співбесіду PHP Laravel Developer 2026: Повний посібник з підготовки

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

PHP Laravel Developer Interview Questions 2026

Питання на співбесіді для 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().

app/Http/Controllers/PostController.phpphp
// Проблема 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)
belongsToManyPivot таблицяUser belongsToMany Roles (таблиця role_user)

П: Як працювати з soft deletes і які наслідки?

app/Models/Post.phpphp
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, усуваючи потребу в ручному створенні екземплярів.

app/Providers/AppServiceProvider.phpphp
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 керують авторизацією.

app/Policies/PostPolicy.phpphp
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 операцій.

app/Providers/AppServiceProvider.phpphp
Gate::define('access-admin', function (User $user) {
    return $user->is_admin || $user->hasRole('super-admin');
});

// Використання
if (Gate::allows('access-admin')) {
    // Показати адмін панель
}

Черги та обробка завдань

Фонова обробка необхідна для масштабованих застосунків. Інтерв'юери перевіряють розуміння конфігурації черг, обробки помилок та патернів повторних спроб.

П: Як працюють черги Laravel і коли їх використовувати?

Черги відкладають ресурсоємні завдання для подальшої обробки. Типові випадки використання включають відправку email, обробку зображень та API виклики.

app/Jobs/ProcessPodcast.phpphp
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 виконує завдання послідовно, зупиняючись при невдачах.

php
// 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 застосунок.

tests/Unit/Services/PricingServiceTest.phpphp
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
        ]);
    }
}

П: Як тестувати завдання черги?

php
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 у тестах.

app/Repositories/PostRepository.phpphp
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 — це окремий клас, відповідальний за одне бізнес-завдання. Забезпечує кращу тестованість та повторне використання, ніж розміщення логіки в контролерах.

app/Actions/CreateOrder.phpphp
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.

php
// Інтеграція 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

Автор:

Anthony Fillion-Maillet

Засновник SharpSkill

Fullstack-розробник понад 10 років. Керує SharpSkill і відповідає за все, що тут публікується.

Оновлено 7 вересня 2026 р.

Теги

#laravel
#php
#interview
#career

Поділитися

Пов'язані статті