Методи перевірки типу вмісту запитів у Laravel

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
У Laravel є потужні інструменти для визначення переважного типу контенту клієнта за допомогою заголовка Accept, що відкриває нові горизонти для вашого додатку. Дізнайтеся, як ці методи допомагають реалізувати складні стратегії узгодження контенту і підвищити зручність користування вашими розробками!

Laravel надає потужні інструменти для аналізу уподобань типів контенту клієнтів через заголовок Accept. Ці методи дозволяють реалізувати складні стратегії узгодження контенту у ваших додатках.

Laravel пропонує два основні методи для перевірки типів контенту:

$allTypes = $request->getAcceptableContentTypes();

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

Перший метод повертає всі прийнятні типи контенту, тоді як другий перевіряє, чи приймає запит один із зазначених вами типів.

class ProductController extends Controller
{
    public function catalog(Request $request)
    {
        $products = Product::with('category')->paginate(20);
        $acceptedTypes = $request->getAcceptableContentTypes();

        if ($request->accepts(['application/json'])) {
            return response()->json([
                'products' => $products->items(),
                'pagination' => [
                    'current_page' => $products->currentPage(),
                    'total_pages' => $products->lastPage(),
                    'per_page' => $products->perPage()
                ]
            ]);
        }

        if ($request->accepts(['application/xml'])) {
            return response()
                ->view('products.xml', compact('products'))
                ->header('Content-Type', 'application/xml');
        }

        if ($request->accepts(['text/csv'])) {
            $csvData = $this->generateProductCsv($products);
            return response($csvData)
                ->header('Content-Type', 'text/csv')
                ->header('Content-Disposition', 'attachment; filename="products.csv"');
        }

        return view('products.catalog', compact('products'));
    }

    public function details(Request $request, Product $product)
    {
        $supportedFormats = ['application/json', 'text/html', 'application/pdf'];

        if (!$request->accepts($supportedFormats)) {
            return response()->json([
                'error' => 'Unsupported content type',
                'supported' => $supportedFormats
            ], 406);
        }

        if ($request->accepts(['application/json'])) {
            return response()->json([
                'product' => $product->load(['reviews', 'specifications']),
                'related_products' => $product->getRelatedProducts(5),
                'average_rating' => $product->reviews->avg('rating')
            ]);
        }

        if ($request->accepts(['application/pdf'])) {
            $pdf = $this->generateProductPdf($product);
            return response($pdf)
                ->header('Content-Type', 'application/pdf')
                ->header('Content-Disposition', 'inline; filename="product-' . $product->id . '.pdf"');
        }

        return view('products.details', compact('product'));
    }

    private function generateProductCsv($products)
    {
        $output = "ID,Name,Price,Category,Stock\n";

        foreach ($products as $product) {
            $output .= sprintf(
                "%d,%s,%.2f,%s,%d\n",
                $product->id,
                $product->name,
                $product->price,
                $product->category->name,
                $product->stock_quantity
            );
        }

        return $output;
    }

    private function generateProductPdf(Product $product)
    {
        $pdf = new ProductPdfGenerator();
        return $pdf->generate($product);
    }
}

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

Популярні

Logomark Logotype

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

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

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю