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);
}
}
Ці методи перевірки контенту дозволяють динамічно формувати відповіді залежно від можливостей клієнта, що робить застосунки більш універсальними та зручними для користувачів
Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!
Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю