پاسخ های HTTP
پاسخ های اساسی
رشته های برگشتی از مسیرها
اساسی ترین پاسخ از مسیر لاراول یک رشته است:
Route::get('/', function(){ return 'Hello World';});
ایجاد پاسخ های سفارشی
Illuminate\Http\Response
با این حال، برای اکثر مسیرها و اقدامات کنترلکننده، یک نمونه کامل یا یک
نمای
را برمیگردانید
.
بازگرداندن یک
Response
نمونه کامل به شما امکان میدهد کد و سرصفحه وضعیت HTTP پاسخ را سفارشی کنید.
یک
Response
نمونه از
Symfony\Component\HttpFoundation\Response
کلاس به ارث میبرد و روشهای مختلفی را برای ساخت پاسخهای HTTP ارائه میکند:
use Illuminate\Http\Response; return (new Response($content, $status)) ->header('Content-Type', $value);
برای راحتی، می توانید از
response
کمک کننده نیز استفاده کنید:
return response($content, $status) ->header('Content-Type', $value);
توجه: برای فهرست کامل روشهای موجود ، اسناد API و اسناد Symfony API را
Response
بررسی کنید .
ارسال دیدگاه در یک پاسخ
اگر نیاز به دسترسی به متدهای کلاس دارید
Response
، اما می خواهید یک view را به عنوان محتوای پاسخ برگردانید، می توانید
view
برای راحتی کار از روش استفاده کنید:
return response()->view('hello')->header('Content-Type', $type);
پیوست کردن کوکی ها به پاسخ ها
return response($content)->withCookie(cookie('name', 'value'));
روش زنجیر زنی
به خاطر داشته باشید که اکثر
Response
روش ها زنجیره ای هستند و امکان ساخت روان پاسخ ها را فراهم می کنند:
return response()->view('hello')->header('Content-Type', $type) ->withCookie(cookie('name', 'value'));
تغییر مسیرها
پاسخهای تغییر مسیر معمولاً نمونههایی از
Illuminate\Http\RedirectResponse
کلاس هستند و حاوی سرصفحههای مناسبی هستند که برای هدایت کاربر به URL دیگر لازم است.
بازگشت یک تغییر مسیر
چندین روش برای تولید یک نمونه وجود دارد
RedirectResponse
.
ساده ترین روش استفاده از
redirect
روش کمکی است.
هنگام آزمایش، تقلید ایجاد یک پاسخ تغییر مسیر معمول نیست، بنابراین استفاده از روش کمکی تقریباً همیشه قابل قبول است:
return redirect('user/login');
بازگشت یک تغییر مسیر با داده های فلش
تغییر مسیر به یک URL جدید و
فلش کردن داده ها به جلسه
معمولاً همزمان انجام می شود.
بنابراین، برای راحتی، میتوانید یک
RedirectResponse
نمونه ایجاد کنید
و
دادهها را در یک زنجیره متد برای جلسه فلش کنید:
return redirect('user/login')->with('message', 'Login Failed');
تغییر مسیر به آدرس قبلی
ممکن است بخواهید کاربر را به مکان قبلی خود هدایت کنید، برای مثال، پس از ارسال فرم.
با استفاده از روش زیر می توانید این کار را انجام دهید
back
:
return redirect()->back(); return redirect()->back()->withInput();
بازگشت یک تغییر مسیر به یک مسیر نامگذاری شده
وقتی
redirect
کمکی را بدون هیچ پارامتری فراخوانی میکنید، یک نمونه از
Illuminate\Routing\Redirector
برگردانده میشود که به شما امکان میدهد هر متدی را در
Redirector
نمونه فراخوانی کنید.
به عنوان مثال، برای ایجاد یک
RedirectResponse
مسیر به نام، می توانید از
route
روش زیر استفاده کنید:
return redirect()->route('login');
بازگشت یک تغییر مسیر به یک مسیر نامگذاری شده با پارامترها
اگر مسیر شما دارای پارامترهایی است، می توانید آنها را به عنوان آرگومان دوم به
route
متد ارسال کنید.
// For a route with the following URI: profile/{id} return redirect()->route('profile', [1]);
اگر به مسیری با پارامتر "ID" هدایت میشوید که از یک مدل Eloquent پر شده است، میتوانید به سادگی خود مدل را پاس کنید. شناسه به طور خودکار استخراج می شود:
return redirect()->route('profile', [$user]);
بازگشت یک تغییر مسیر به یک مسیر نامگذاری شده با استفاده از پارامترهای نامگذاری شده
// For a route with the following URI: profile/{user} return redirect()->route('profile', ['user' => 1]);
بازگشت یک تغییر مسیر به یک اقدام کنترلر
به طور مشابه با تولید
RedirectResponse
نمونههایی به مسیرهای نامگذاری شده، میتوانید تغییر مسیرهایی را به
اقدامات کنترلر
نیز ایجاد کنید :
return redirect()->action('App\Http\Controllers\HomeController@index');
توجه: اگر فضای نام کنترل کننده ریشه را از طریق ثبت نام کرده اید، نیازی به تعیین فضای نام کامل برای کنترلر ندارید
URL::setRootControllerNamespace
.
بازگشت یک تغییر مسیر به یک کنش کنترلر با پارامترها
return redirect()->action('App\Http\Controllers\UserController@profile', [1]);
برگرداندن یک تغییر مسیر به یک عملکرد کنترلر با استفاده از پارامترهای نامگذاری شده
return redirect()->action('App\Http\Controllers\UserController@profile', ['user' => 1]);
پاسخ های دیگر
کمک
response
کننده ممکن است برای تولید راحت انواع دیگر نمونه های پاسخ استفاده شود.
هنگامی که
response
کمک کننده بدون استدلال فراخوانی می شود، اجرای قرارداد
Illuminate\Contracts\Routing\ResponseFactory
برگردانده
می شود.
این قرارداد چندین روش مفید برای ایجاد پاسخ ارائه می دهد.
ایجاد پاسخ JSON
این
json
روش به طور خودکار
Content-Type
هدر را به صورت زیر تنظیم می کند
application/json
:
return response()->json(['name' => 'Abigail', 'state' => 'CA']);
ایجاد پاسخ JSONP
return response()->json(['name' => 'Abigail', 'state' => 'CA']) ->setCallback($request->input('callback'));
ایجاد پاسخ دانلود فایل
return response()->download($pathToFile); return response()->download($pathToFile, $name, $headers); return response()->download($pathToFile)->deleteFileAfterSend(true);
توجه: Symfony HttpFoundation، که دانلود فایلها را مدیریت میکند، باید فایلی که دانلود میشود دارای نام فایل ASCII باشد.
ماکروهای پاسخگویی
اگر میخواهید یک پاسخ سفارشی تعریف کنید که میتوانید در مسیرهای مختلف و کنترلکنندههای خود دوباره از آن استفاده کنید، میتوانید
macro
از روش پیادهسازی استفاده کنید
Illuminate\Contracts\Routing\ResponseFactory
.
به عنوان مثال، از روش
ارائه دهنده خدمات
boot
:
<?php namespace App\Providers; use Response;use Illuminate\Support\ServiceProvider; class ResponseMacroServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. * * @return void */ public function boot() { Response::macro('caps', function($value) { return Response::make(strtoupper($value)); }); } }
تابع
macro
یک نام را به عنوان اولین آرگومان خود و یک Closure را به عنوان دومین آرگومان خود می پذیرد.
هنگام فراخوانی نام ماکرو از یک
ResponseFactory
پیاده سازی یا
response
کمک کننده، بسته شدن ماکرو اجرا می شود:
return response()->caps('foo');