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

Перекладено ШІ 1 Laravel News 03 червня, 2026

У 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);
    }
}

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

Популярні

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

10 Оновлено 02 червня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!

19 Оновлено 02 червня, 2026

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

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

18 Оновлено 02 червня, 2026

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

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