Переговори щодо контенту за допомогою методу prefers у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 05 липня, 2025
Метод `prefers` в Laravel спрощує переговори про типи контенту, визначаючи, який формат бажає клієнт серед запропонованих вами варіантів. Дізнайтеся, як за допомогою цього методу створити гнучкі ендпоінти, які підтримують різноманітні формати, що відповідають вимогам ваших користувачів

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

Метод оцінює заголовок Accept клієнта у відповідності з підтримуваними вами форматами:

$contentType = $request->prefers(['application/json', 'text/html']);

Якщо клієнт приймає один з визначених вами типів, повертається саме цей тип. Якщо ні — ви отримаєте null для подальшої обробки.

public function index(Request $request)
{
    $products = Product::paginate(15);
    $preferred = $request->prefers(['application/json', 'text/html']);
 
    if ($preferred === 'application/json') {
        return response()->json($products);
    }
 
    return view('products.index', compact('products'));
}

Ось детальна система звітності, яка демонструє розширену домовленість про контент:

class ReportController extends Controller
{
    public function export(Request $request, Report $report)
    {
        $supportedFormats = [
            'application/json',
            'text/csv',
            'application/pdf',
            'application/vnd.ms-excel'
        ];
 
        $preferred = $request->prefers($supportedFormats);
 
        return match($preferred) {
            'application/json' => $this->exportAsJson($report),
            'text/csv' => $this->exportAsCsv($report),
            'application/pdf' => $this->exportAsPdf($report),
            'application/vnd.ms-excel' => $this->exportAsExcel($report),
            default => response()->json(['error' => 'Unsupported format'], 406)
        };
    }
 
    public function dashboard(Request $request)
    {
        $analytics = $this->gatherAnalytics();
        $preferred = $request->prefers(['text/html', 'application/json', 'text/plain']);
 
        return match($preferred) {
            'text/html' => view('dashboard.analytics', compact('analytics')),
            'application/json' => response()->json([
                'analytics' => $analytics,
                'generated_at' => now()->toISOString(),
                'cache_duration' => 300
            ]),
            'text/plain' => response($this->formatAsPlainText($analytics))
                ->header('Content-Type', 'text/plain'),
            default => response('Format not supported', 406)
        };
    }
 
    private function exportAsJson(Report $report)
    {
        return response()->json([
            'report_data' => $report->data,
            'metadata' => [
                'generated_at' => now(),
                'report_type' => $report->type,
                'record_count' => count($report->data)
            ]
        ]);
    }
 
    private function exportAsCsv(Report $report)
    {
        $csv = $this->generateCsvContent($report);
 
        return response($csv)
            ->header('Content-Type', 'text/csv')
            ->header('Content-Disposition', 'attachment; filename="report.csv"');
    }
 
    private function gatherAnalytics()
    {
        return [
            'total_users' => User::count(),
            'active_sessions' => Session::where('last_activity', '>', now()->subHour())->count(),
            'revenue_today' => Order::whereDate('created_at', today())->sum('total'),
            'performance_metrics' => $this->getPerformanceData()
        ];
    }
}

Домовленість про контент через метод prefers дозволяє розробляти надійні API, які відповідають різноманітним вимогам клієнтів, зберігаючи при цьому чистоту та підтримуваність коду

Популярні

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

Інтеграція Laravel Socialite з бібліотекою Google Client PHP

Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті

Logomark Logotype

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!