HTTP Responses
Creating Responses
Strings & Arrays
Route::get('/', function () {
return 'Hello World';
});
Route::get('/', function () {
return [1, 2, 3];
});
Response Objects
Route::get('/home', function () {
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});
Eloquent Models & Collections
use App\Models\User;
Route::get('/user/{user}', function (User $user) {
return $user;
});
Attaching Headers To Responses
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
return response($content)
->withHeaders([
'Content-Type' => $type,
'X-Header-One' => 'Header Value',
'X-Header-Two' => 'Header Value',
]);
Cache Control Middleware
Route::middleware('cache.headers:public;max_age=2628000;etag')->group(function () {
Route::get('/privacy', function () {
// ...
});
Route::get('/terms', function () {
// ...
});
});
Attaching Cookies To Responses
return response('Hello World')->cookie(
'name', 'value', $minutes
);
Generating Cookie Instances
$cookie = cookie('name', 'value', $minutes);
return response('Hello World')->cookie($cookie);
Expiring Cookies Early
return response('Hello World')->withoutCookie('name');
Cookie::expire('name');
Cookies & Encryption
- Mặc định tất cả cookie sinh ra bởi Laravel sẽ được encrypted và signed.
- Có thể bỏ qua bằng cách khai báo vào thuộc tính
$excepttrongApp\Http\Middleware\EncryptCookies
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
'cookie_name',
];
Redirects
Route::get('/dashboard', function () {
return redirect('home/dashboard');
});
Route::post('/user/profile', function () {
// Validate the request...
return back()->withInput();
});
Redirecting To Named Routes
return redirect()->route('login');
// For a route with the following URI: /profile/{id}
return redirect()->route('profile', ['id' => 1]);
Populating Parameters Via Eloquent Models
- Trong trường hợp route redirect với tham số
idthay vì truyền trực tiếpidta có thể truyền một Eloquent model để thay thế, id sẽ được tự động truy xuất
// For a route with the following URI: /profile/{id}
return redirect()->route('profile', [$user]);
Redirecting To Controller Actions
use App\Http\Controllers\UserController;
return redirect()->action([UserController::class, 'index']);
return redirect()->action(
[UserController::class, 'profile'], ['id' => 1]
);
Redirecting To External Domains
- Đôi khi bạn muốn redirect đến 1 domain ngoài ứng dụng của mình, có thể sử dụng method
away()
return redirect()->away('https://www.google.com');
Redirecting With Flashed Session Data
Route::post('/user/profile', function () {
// ...
return redirect('dashboard')->with('status', 'Profile updated!');
});
- Blade syntax
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
Redirecting With Input
return back()->withInput();
Other Response Types
View Responses
return response()
->view('hello', $data, 200)
->header('Content-Type', $type);
JSON Responses
return response()->json([
'name' => 'Abigail',
'state' => 'CA',
]);
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->withCallback($request->input('callback'));
File Downloads
return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
Streamed Downloads
- Nếu bạn muốn biến response trở thành download respone mà không cần lưu vào ổ đĩa dưới dạng 1 file:
use App\Services\GitHub;
return response()->streamDownload(function () {
echo GitHub::api('repo')
->contents()
->readme('laravel', 'laravel')['contents'];
}, 'laravel-readme.md');
File Responses
- Để hiện thị file
return response()->file($pathToFile);
return response()->file($pathToFile, $headers);
Response Macros
- Nếu bạn muốn custom response để có thể tái sử dụng ở nhiều route hoặc controller thì bạn nên sử dụng
macromethod củaResponsefacade. Cùng vớ đó là việc bạn cần phải gọi đến chúng trong phương thứcbootcủa 1 trong những `service prodiders:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Response::macro('caps', function ($value) {
return Response::make(strtoupper($value));
});
}
}
- Khi đó trong route hoặc controller bạn có thể dùng response helper để gọi như sau:
return response()->caps('foo');
All rights reserved