Метод 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, які відповідають різноманітним вимогам клієнтів, зберігаючи при цьому чистоту та підтримуваність коду
PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення
Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті
Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!