Laravel 5.4
Awesome Laravel
- Awesome Laravel (Chirag Gude)
Prologue
- Release Notes
- Upgrade Guide
Getting Started
- Installation
- Configuration
- Directory Structure
- Laravel Homestead
- valet
Architecture Concepts
- Request Lifecycle
- Service Container
- Service Providers
- Facades
The Basics
- Routing
- Errors & Logging
- Middleware
- CSRF Protection
- Controllers
- HTTP Requests
- HTTP Responses
- Views
- HTTP Session
- Validation
Frontend
- Blade Templates
- Localization
- JavaScript & CSS Scaffolding
- Compiling Assets (Laravel Mix)
Security
- Authentication
- API Authentication (Passport)
- Authorization
- Encryption
- Hashing
- Resetting Passwords
Digging Deeper
- Artisan Console
- Queues
- Package Development
- Task Scheduling
- Broadcasting
- Cache
- Collections
- Events
- File Storage
- helpers
- Notifications
Database
- Database Getting Started
- Database Query Builder
- Database Pagination
- Database Migrations
- Database Seeding
- Redis
Eloquent ORM
- Eloquent Getting Started
- Eloquent Relationships
- Eloquent Collections
- Eloquent Mutators
- Eloquent Serialization
Testing
- Testing Getting Started
- HTTP Tests
- Browser Tests (Laravel Dusk)
- Database Testing
- Mocking
- redirect
Official Packages
- Laravel Cashier
- Envoy Task Runner
- Laravel Scout
HTTP Responses
Creating Responses
Strings & Arrays
All routes and controllers should return a response to be sent back to the user’s browser. Laravel provides several different ways to return responses. The most basic response is simply returning a string from a route or controller. The framework will automatically convert the string into a full HTTP response:
In addition to returning strings from your routes and controllers, you may also return arrays. The framework will automatically convert the array into a JSON response:
Did you know you can also return Eloquent collections from your routes or controllers? They will automatically be converted to JSON. Give it a shot!
Response Objects
Typically, you won’t just be returning simple strings or arrays from your route actions. Instead, you will be returning full Illuminate\Http\Response
instances or views.
Returning a full Response
instance allows you to customize the response’s HTTP status code and headers. A Response
instance inherits from the Symfony\Component\HttpFoundation\Response
class, which provides a variety of methods for building HTTP responses:
Attaching Headers To Responses
Keep in mind that most response methods are chainable, allowing for the fluent construction of response instances. For example, you may use the header
method to add a series of headers to the response before sending it back to the user:
|
Or, you may use the withHeaders
method to specify an array of headers to be added to the response:
Attaching Cookies To Responses
The cookie
method on response instances allows you to easily attach cookies to the response. For example, you may use the cookie
method to generate a cookie and fluently attach it to the response instance like so:
The cookie
method also accepts a few more arguments which are used less frequently. Generally, these arguments have the same purpose and meaning as the arguments that would be given to PHP’s native setcookie method:
Cookies & Encryption
By default, all cookies generated by Laravel are encrypted and signed so that they can’t be modified or read by the client. If you would like to disable encryption for a subset of cookies generated by your application, you may use the $except
property of the App\Http\Middleware\EncryptCookies
middleware, which is located in the app/Http/Middleware
directory:
Redirects
Redirect responses are instances of the Illuminate\Http\RedirectResponse
class, and contain the proper headers needed to redirect the user to another URL. There are several ways to generate a RedirectResponse
instance. The simplest method is to use the global redirect
helper:
Sometimes you may wish to redirect the user to their previous location, such as when a submitted form is invalid. You may do so by using the global back
helper function. Since this feature utilizes the session, make sure the route calling the back
function is using the web
middleware group or has all of the session middleware applied:
Redirecting To Named Routes
When you call the redirect
helper with no parameters, an instance of Illuminate\Routing\Redirector
is returned, allowing you to call any method on the Redirector
instance. For example, to generate a RedirectResponse
to a named route, you may use the route
method:
If your route has parameters, you may pass them as the second argument to the route
method:
Populating Parameters Via Eloquent Models
If you are redirecting to a route with an “ID” parameter that is being populated from an Eloquent model, you may simply pass the model itself. The ID will be extracted automatically:
If you would like to customize the value that is placed in the route parameter, you should override the getRouteKey
method on your Eloquent model:
Redirecting To Controller Actions
You may also generate redirects to controller actions. To do so, pass the controller and action name to the action
method. Remember, you do not need to specify the full namespace to the controller since Laravel’s RouteServiceProvider
will automatically set the base controller namespace:
If your controller route requires parameters, you may pass them as the second argument to the action
method:
Redirecting With Flashed Session Data
Redirecting to a new URL and flashing data to the session are usually done at the same time. Typically, this is done after successfully performing an action when you flash a success message to the session. For convenience, you may create a RedirectResponse
instance and flash data to the session in a single, fluent method chain:
After the user is redirected, you may display the flashed message from the session. For example, using Blade syntax:
Other Response Types
The response
helper may be used to generate other types of response instances. When the response
helper is called without arguments, an implementation of the Illuminate\Contracts\Routing\ResponseFactory
contract is returned. This contract provides several helpful methods for generating responses.
View Responses
If you need control over the response’s status and headers but also need to return a view as the response’s content, you should use the view
method:
Of course, if you do not need to pass a custom HTTP status code or custom headers, you should use the global view
helper function.
JSON Responses
The json
method will automatically set the Content-Type
header to application/json
, as well as convert the given array to JSON using the json_encode
PHP function:
If you would like to create a JSONP response, you may use the json
method in combination with the withCallback
method:
File Downloads
The download
method may be used to generate a response that forces the user’s browser to download the file at the given path. The download
method accepts a file name as the second argument to the method, which will determine the file name that is seen by the user downloading the file. Finally, you may pass an array of HTTP headers as the third argument to the method:
{note} Symfony HttpFoundation, which manages file downloads, requires the file being downloaded to have an ASCII file name.
File Responses
The file
method may be used to display a file, such as an image or PDF, directly in the user’s browser instead of initiating a download. This method accepts the path to the file as its first argument and an array of headers as its second argument:
Response Macros
If you would like to define a custom response that you can re-use in a variety of your routes and controllers, you may use the macro
method on the Response
facade. For example, from a service provider’s boot
method:
The macro
function accepts a name as its first argument, and a Closure as its second. The macro’s Closure will be executed when calling the macro name from a ResponseFactory
implementation or the response
helper: