Laravel Paper: новий Eloquent-драйвер для роботи з flat-file даними.

Перекладено ШІ 0 Laravel News 26 травня, 2026

Laravel Paper дозволяє працювати з Markdown та JSON файлами за допомогою знайомих методів Eloquent. Дізнайтеся, як легко перетворити вашу файлову систему на структуроване джерело даних для вашого проєкту.

Laravel Paper від Jacob Jørgensen переносить функціональність Eloquent на роботу з локальними файлами. Пакет дозволяє працювати з Markdown та JSON як із записами в базі даних. Це зручне рішення для документації, каталогів товарів або невеликих CMS, де використання повноцінної бази даних є зайвим.

# Перетворення файлів на моделі

Завдяки трейту Paper та PHP 8 attributes ви можете прив’язати модель до конкретної директорії на диску. Для початку роботи не потрібно налаштовувати підключення до бази чи запускати migrations:

use Illuminate\Database\Eloquent\Model;
use JacobJoergensen\LaravelPaper\Attributes\ContentPath;
use JacobJoergensen\LaravelPaper\Attributes\Driver;
use JacobJoergensen\LaravelPaper\Paper;
 
#[Driver('markdown')]
#[ContentPath('content/docs')]
class Document extends Model
{
    use Paper;
}

# Запити до файлових даних

Оскільки драйвер реалізує інтерфейс Eloquent, для фільтрації та сортування файлів доступні стандартні методи query builder. Slug автоматично генерується з імені файлу і виступає основним ідентифікатором:

// Отримання всіх сторінок документації для конкретної версії
$docs = Document::where('version', 'v1.0')
    ->orderBy('priority', 'asc')
    ->get();
 
// Отримання конкретної сторінки за назвою файлу
$setup = Document::find('initial-setup');
 
// Пошук у масивах frontmatter або тексті
$tagged = Document::whereContains('labels', 'api')->get();
$found = Document::whereLike('subtitle', '%configuration%')->get();

# Зв’язки між файлами

Пакет дозволяє пов’язувати моделі між собою. Ви можете визначати асоціації на основі полів, що зберігаються у frontmatter ваших файлів:

public function category()
{
    // Визначається за ключем 'category_slug' у Markdown frontmatter
    return $this->belongsToPaper(Category::class);
}
 
public function subPages()
{
    return $this->hasManyPaper(Document::class);
}

# Управління файлами через Eloquent

Laravel Paper підтримує повноцінний запис даних. Методи save() та delete() виконують відповідні операції у файловій системі, синхронізуючи стан контенту з моделлю:

// Створення нового файлу
$doc = new Document();
$doc->slug = 'new-guide';
$doc->title = 'Architecture Overview';
$doc->content = 'Markdown content starts here...';
$doc->save(); // Створює файл content/docs/new-guide.md
 
// Видалення існуючого файлу
$outdated = Document::find('old-api-guide');
$outdated?->delete(); // Видаляє файл із диска

# Встановлення

Пакет встановлюється через Composer:

composer require jacobjoergensen/laravel-paper

Laravel Paper вимагає PHP 8.4 та Laravel 12.0 або новішої версії. Для роботи з Markdown драйвером файли мають містити метадані у форматі YAML frontmatter:

---
title: Architecture Overview
version: v1.0
labels: [api, core]
priority: 1
 
---
Markdown content starts here...

Вихідний код та документація щодо створення власних drivers доступні на GitHub.

Популярні

Інше, що варто прочитати

15 Оновлено 26 травня, 2026

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті

17 Оновлено 26 травня, 2026

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці

10 Оновлено 26 травня, 2026

Локальні моделі та їх скоупи в Laravel за допомогою атрибута Scope

В Laravel 12 ми отримали можливість використовувати новий підхід для визначення локальних скоупів у моделях Eloquent. Дізнайтеся, як новий атрибут #[Scope] спрощує цей процес і зберігає ваші назви методів незмінними