Laravel: Junior
20 питань · ~15 хв · Версія v3.0
Увійдіть, щоб продовжити
Базові знання фреймворку, маршрутизація, Blade, Eloquent.
- За спробу
- 20
- У пулі
- 100
- Проходжень
- 101
- Середній бал
- 83%
- Пройшли на 70%+
- 91%
Питання для підготовки
101 питанняMVC (Model-View-Controller) - це архітектурний патерн, який розділяє застосунок на три шари, аби логіка обробки даних, бізнес-правила та відображення не змішувались між собою. Laravel побудований навколо MVC, тож кожному шару відповідає своя директорія.
Три складові:
- Model - відповідає за дані та бізнес-логіку: спілкування з базою, зв'язки, валідаційні правила домену. У Laravel моделі розширюють Eloquent і лежать у
app/Models. - View - відповідає лише за відображення. У Laravel це Blade-шаблони у
resources/views; вони не повинні містити складної логіки. - Controller - приймає HTTP-запит, координує роботу моделей, готує дані й повертає View або відповідь. Лежать у
app/Http/Controllers.
Як це працює разом: запит потрапляє на маршрут (routes/web.php), той викликає метод контролера. Контролер звертається до моделі за даними й передає їх у view:
class PostController extends Controller
{
// Route Model Binding: $post резолвиться автоматично
public function show(Post $post)
{
// контролер координує: бере дані з моделі й віддає у view
return view('posts.show', ['post' => $post]);
}
}
Навіщо: розділення відповідальностей спрощує тестування, підтримку й командну роботу - верстку можна змінити, не чіпаючи запити до БД, і навпаки. Laravel розширює класичний MVC сервісним контейнером, middleware та провайдерами.
Міграція - це контроль версій для структури бази даних. Замість того щоб писати SQL вручну й узгоджувати його між розробниками, ви описуєте схему PHP-кодом, який комітиться в git і застосовується однаково в усіх середовищах.
Міграції зберігаються в директорії database/migrations. Кожен файл - це клас із двома методами:
up()- описує зміни, які треба застосувати (створити таблицю, додати колонку, індекс).down()- описує зворотну операцію для відкату (видалити таблицю чи колонку).
Створити міграцію:
php artisan make:migration create_posts_table
Згенерований файл заповнюють у методі up():
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
Основні команди:
php artisan migrate- застосувати нові міграції.php artisan migrate:rollback- відкотити останній «батч».php artisan migrate:fresh --seed- перестворити всі таблиці й засіяти даними.
Навіщо: будь-який розробник на новій машині отримує ідентичну схему БД однією командою, а зміни структури проходять через code review разом із кодом.
Маршрутизація визначає, як застосунок відповідає на запити: вона прив'язує URL та HTTP-метод до конкретної дії - замикання або методу контролера.
Маршрути оголошуються у файлах директорії routes:
web.php- веб-інтерфейс із сесіями, cookie та CSRF-захистом.api.php- stateless API (без сесій, з префіксом/api).console.php- команди та розклад.
Laravel підтримує методи для кожного HTTP-дієслова - Route::get, post, put, patch, delete, а також Route::match([...]) і Route::any:
Route::get('/posts', [PostController::class, 'index']);
Route::post('/posts', [PostController::class, 'store']);
Route::get('/posts/{post}', [PostController::class, 'show'])->name('posts.show');
// Групи: спільні middleware, префікс, простір імен
Route::middleware('auth')->prefix('admin')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
});
Ключові можливості:
{post}- параметр маршруту; його можна одразу резолвити в модель (Route Model Binding).->name('posts.show')- іменований маршрут для генерації URL черезroute('posts.show', $post).Route::resource(...)- одразу 7 RESTful-маршрутів для CRUD.
Переглянути всі зареєстровані маршрути: php artisan route:list.
Eloquent - це ORM (object-relational mapping) Laravel, реалізація патерну Active Record. Кожній таблиці відповідає модель (зазвичай у app/Models), рядок таблиці - це екземпляр моделі, а робота з даними виглядає як робота зі звичайними PHP-об'єктами замість написання SQL.
Створити модель (за конвенцією однина: Post → таблиця posts):
php artisan make:model Post -mf # одразу з міграцією та фабрикою
Базові операції (CRUD):
$post = Post::create(['title' => 'Привіт']); // create
$post = Post::find(1); // read
$post->update(['title' => 'Оновлено']); // update
$post->delete(); // delete
Post::where('is_published', true)->latest()->get();
Що дає Eloquent понад Query Builder:
- Зв'язки -
hasOne,hasMany,belongsTo,belongsToMany, поліморфні. - Аксесори/мутатори та касти атрибутів (наприклад, дати, enum, JSON).
- Події моделі та обзервери (
creating,saved,deleted). - Scopes для перевикористання умов запитів.
Eloquent побудований поверх Query Builder, тож ті самі методи (where, orderBy, join) доступні і на моделях.
CSRF (Cross-Site Request Forgery) - це атака, коли сторонній сайт змушує браузер автентифікованого користувача надіслати небажаний запит на ваш застосунок, використовуючи його активну сесію (наприклад, прихована форма, що переказує гроші).
Як Laravel захищає: для кожної активної сесії генерується унікальний CSRF-токен. Middleware ValidateCsrfToken перевіряє цей токен для всіх «небезпечних» методів - POST, PUT, PATCH, DELETE. Запити без валідного токена відхиляються з кодом 419.
У формах додають директиву @csrf, яка вставляє прихований інпут із токеном:
<form method="POST" action="/profile">
@csrf
<input name="email" type="email">
<button>Зберегти</button>
</form>
Для AJAX токен передають у заголовку X-CSRF-TOKEN (зазвичай із <meta name="csrf-token">):
fetch('/profile', {
method: 'POST',
headers: { 'X-CSRF-TOKEN': token },
});
GET-запити токена не потребують (вони мають бути безпечними й не змінювати стан). Для stateless API на токенах (Sanctum) CSRF не застосовується.
Спершу почитати
Прочитати - ще не значить знати
20 питань, по одному на екран, ~15 хв. Після завершення - розбір кожної помилки з посиланням на питання.