0. Documentation

1. Prologue

1. Release Notes

0. Release Notes
1. Versioning Scheme
1.1.1. Named Arguments
2. Support Policy
3. Laravel 11
3.2. PHP 8.2

2. Upgrade Guide

0. Upgrade Guide
1. High Impact Changes
2. Upgrading To 11.0 From 10.x
2.0.1. Estimated Upgrade Time: ?? Minutes
2.1. Updating Dependencies
2.1.1. PHP 8.2.0 Required
2.1.2. Composer Dependencies

3. Contribution Guide

0. Contribution Guide
1. Bug Reports
2. Support Questions
3. Core Development Discussion
4. Which Branch?
5. Compiled Assets
6. Security Vulnerabilities
7. Coding Style
7.1. PHPDoc
7.2. StyleCI
8. Code of Conduct

2. Getting Started

1. Installation

0. Installation
1. Meet Laravel
1.1. Why Laravel?
1.1.1. A Progressive Framework
1.1.2. A Scalable Framework
1.1.3. A Community Framework
2. Your First Laravel Project
3. Laravel & Docker
3.2. Getting Started On macOS
3.3. Getting Started On Windows
3.3.1. Developing Within WSL2
3.4. Getting Started On Linux
3.5. Choosing Your Sail Services
4. Initial Configuration
4.1. Environment Based Configuration
4.2. Databases & Migrations
5. Next Steps
5.1. Laravel The Full Stack Framework
5.2. Laravel The API Backend

2. Configuration

0. Configuration
1. Introduction
1.0.1. Application Overview
2. Environment Configuration
2.0.1. Environment File Security
2.0.2. Additional Environment Files
2.1. Environment Variable Types
2.2. Retrieving Environment Configuration
2.3. Determining The Current Environment
2.4. Encrypting Environment Files
2.4.1. Encryption
2.4.2. Decryption
3. Accessing Configuration Values
4. Configuration Caching
5. Debug Mode
6. Maintenance Mode
6.4.1. Bypassing Maintenance Mode
6.4.2. Pre-Rendering The Maintenance Mode View
6.4.3. Redirecting Maintenance Mode Requests
6.4.4. Disabling Maintenance Mode
6.4.5. Maintenance Mode & Queues
6.4.6. Alternatives To Maintenance Mode

3. Directory Structure

0. Directory Structure
1. Introduction
2. The Root Directory
2.1.1. The App Directory
2.1.2. The Bootstrap Directory
2.1.3. The Config Directory
2.1.4. The Database Directory
2.1.5. The Public Directory
2.1.6. The Resources Directory
2.1.7. The Routes Directory
2.1.8. The Storage Directory
2.1.9. The Tests Directory
2.1.10. The Vendor Directory
3. The App Directory
3.1.1. The Broadcasting Directory
3.1.2. The Console Directory
3.1.3. The Events Directory
3.1.4. The Exceptions Directory
3.1.5. The Http Directory
3.1.6. The Jobs Directory
3.1.7. The Listeners Directory
3.1.8. The Mail Directory
3.1.9. The Models Directory
3.1.10. The Notifications Directory
3.1.11. The Policies Directory
3.1.12. The Providers Directory
3.1.13. The Rules Directory

4. Frontend

0. Frontend
1. Introduction
2. Using PHP
2.1. PHP & Blade
2.1.1. Growing Expectations
2.2. Livewire
2.3. Starter Kits
3. Using Vue / React
3.1. Inertia
3.1.1. Server-Side Rendering
3.2. Starter Kits
4. Bundling Assets

5. Starter Kits

0. Starter Kits
1. Introduction
2. Laravel Breeze
2.1.1. Laravel Bootcamp
2.2. Installation
2.3. Breeze & Blade
2.3.1. Dark Mode
2.4. Breeze & React / Vue
2.4.1. Server-Side Rendering
2.5. Breeze & Next.js / API
2.5.1. Next.js Reference Implementation
3. Laravel Jetstream

6. Deployment

0. Deployment
1. Introduction
2. Server Requirements
3. Server Configuration
3.1. Nginx
4. Optimization
4.1. Autoloader Optimization
4.2. Optimizing Configuration Loading
4.3. Optimizing Route Loading
4.4. Optimizing View Loading
5. Debug Mode
6. Deploying With Forge / Vapor
6.0.1. Laravel Forge
6.0.2. Laravel Vapor

3. Architecture Concepts

1. Request Lifecycle

0. Request Lifecycle
1. Introduction
2. Lifecycle Overview
2.1. First Steps
2.2. HTTP / Console Kernels
2.3. Service Providers
2.4. Routing
2.5. Finishing Up
3. Focus On Service Providers

2. Service Container

0. Service Container
1. Introduction
1.1. Zero Configuration Resolution
1.2. When To Use The Container
2. Binding
2.1. Binding Basics
2.1.1. Simple Bindings
2.1.2. Binding A Singleton
2.1.3. Binding Scoped Singletons
2.1.4. Binding Instances
2.2. Binding Interfaces To Implementations
2.3. Contextual Binding
2.4. Binding Primitives
2.5. Binding Typed Variadics
2.5.1. Variadic Tag Dependencies
2.6. Tagging
2.7. Extending Bindings
3. Resolving
3.1. The `make` Method
3.2. Automatic Injection
4. Method Invocation & Injection
5. Container Events
6. PSR-11

3. Service Providers

0. Service Providers
1. Introduction
2. Writing Service Providers
2.1. The Register Method
2.1.1. The `bindings` And `singletons` Properties
2.2. The Boot Method
2.2.1. Boot Method Dependency Injection
3. Registering Providers
4. Deferred Providers

4. Facades

0. Facades
1. Introduction
1.1.1. Helper Functions
2. When To Use Facades
2.2. Facades Vs. Dependency Injection
2.3. Facades Vs. Helper Functions
3. How Facades Work
4. Real-Time Facades
5. Facade Class Reference

4. The Basics

1. Routing

0. Routing
1. Basic Routing
1.1.1. The Default Route Files
1.1.2. Available Router Methods
1.1.3. Dependency Injection
1.1.4. CSRF Protection
1.2. Redirect Routes
1.3. View Routes
1.4. The Route List
2. Route Parameters
2.1. Required Parameters
2.1.1. Parameters & Dependency Injection
2.2. Optional Parameters
2.3. Regular Expression Constraints
2.3.1. Global Constraints
2.3.2. Encoded Forward Slashes
3. Named Routes
3.3.1. Generating URLs To Named Routes
3.3.2. Inspecting The Current Route
4. Route Groups
4.4. Middleware
4.5. Controllers
4.6. Subdomain Routing
4.7. Route Prefixes
4.8. Route Name Prefixes
5. Route Model Binding
5.1. Implicit Binding
5.1.1. Soft Deleted Models
5.1.2. Customizing The Key
5.1.3. Custom Keys & Scoping
5.1.4. Customizing Missing Model Behavior
5.2. Implicit Enum Binding
5.3. Explicit Binding
5.3.1. Customizing The Resolution Logic
6. Fallback Routes
7. Rate Limiting
7.4. Defining Rate Limiters
7.4.1. Segmenting Rate Limits
7.4.2. Multiple Rate Limits
7.5. Attaching Rate Limiters To Routes
7.5.1. Throttling With Redis
8. Form Method Spoofing
9. Accessing The Current Route
10. Cross-Origin Resource Sharing (CORS)
11. Route Caching

2. Middleware

0. Middleware
1. Introduction
2. Defining Middleware
2.1.1. Middleware & Responses
3. Registering Middleware
3.2. Global Middleware
3.3. Assigning Middleware To Routes
3.3.1. Excluding Middleware
3.4. Middleware Groups
3.5. Sorting Middleware
4. Middleware Parameters
5. Terminable Middleware

3. CSRF Protection

0. CSRF Protection
1. Introduction
1.1.1. An Explanation Of The Vulnerability
2. Preventing CSRF Requests
2.2. CSRF Tokens & SPAs
2.3. Excluding URIs From CSRF Protection
3. X-CSRF-TOKEN
4. X-XSRF-TOKEN

4. Controllers

0. Controllers
1. Introduction
2. Writing Controllers
2.1. Basic Controllers
2.2. Single Action Controllers
3. Controller Middleware
4. Resource Controllers
4.0.1. Actions Handled By Resource Controller
4.0.2. Customizing Missing Model Behavior
4.0.3. Soft Deleted Models
4.0.4. Specifying The Resource Model
4.0.5. Generating Form Requests
4.1. Partial Resource Routes
4.1.1. API Resource Routes
4.2. Nested Resources
4.2.1. Scoping Nested Resources
4.2.2. Shallow Nesting
4.3. Naming Resource Routes
4.4. Naming Resource Route Parameters
4.5. Scoping Resource Routes
4.6. Localizing Resource URIs
4.7. Supplementing Resource Controllers
4.8. Singleton Resource Controllers
4.8.1. Creatable Singleton Resources
4.8.2. API Singleton Resources
5. Dependency Injection & Controllers
5.8.1. Constructor Injection
5.8.2. Method Injection

5. Requests

0. HTTP Requests
1. Introduction
2. Interacting With The Request
2.1. Accessing The Request
2.1.1. Dependency Injection & Route Parameters
2.2. Request Path, Host, & Method
2.2.1. Retrieving The Request Path
2.2.2. Inspecting The Request Path / Route
2.2.3. Retrieving The Request URL
2.2.4. Retrieving The Request Host
2.2.5. Retrieving The Request Method
2.3. Request Headers
2.4. Request IP Address
2.5. Content Negotiation
2.6. PSR-7 Requests
3. Input
3.1. Retrieving Input
3.1.1. Retrieving All Input Data
3.1.2. Retrieving An Input Value
3.1.3. Retrieving Input From The Query String
3.1.4. Retrieving JSON Input Values
3.1.5. Retrieving Stringable Input Values
3.1.6. Retrieving Boolean Input Values
3.1.7. Retrieving Date Input Values
3.1.8. Retrieving Enum Input Values
3.1.9. Retrieving Input Via Dynamic Properties
3.1.10. Retrieving A Portion Of The Input Data
3.2. Determining If Input Is Present
3.3. Merging Additional Input
3.4. Old Input
3.4.1. Flashing Input To The Session
3.4.2. Flashing Input Then Redirecting
3.4.3. Retrieving Old Input
3.5. Cookies
3.5.1. Retrieving Cookies From Requests
4. Input Trimming & Normalization
4.5.1. Disabling Input Normalization
5. Files
5.6. Retrieving Uploaded Files
5.6.1. Validating Successful Uploads
5.6.2. File Paths & Extensions
5.6.3. Other File Methods
5.7. Storing Uploaded Files
6. Configuring Trusted Proxies
6.0.1. Trusting All Proxies
7. Configuring Trusted Hosts

6. Responses

0. HTTP Responses
1. Creating Responses
1.1.1. Strings & Arrays
1.1.2. Response Objects
1.1.3. Eloquent Models & Collections
1.2. Attaching Headers To Responses
1.2.1. Cache Control Middleware
1.3. Attaching Cookies To Responses
1.3.1. Generating Cookie Instances
1.3.2. Expiring Cookies Early
1.4. Cookies & Encryption
2. Redirects
2.1. Redirecting To Named Routes
2.1.1. Populating Parameters Via Eloquent Models
2.2. Redirecting To Controller Actions
2.3. Redirecting To External Domains
2.4. Redirecting With Flashed Session Data
2.4.1. Redirecting With Input
3. Other Response Types
3.5. View Responses
3.6. JSON Responses
3.7. File Downloads
3.7.1. Streamed Downloads
3.8. File Responses
4. Response Macros

7. Views

0. Views
1. Introduction
1.1. Writing Views In React / Vue
2. Creating & Rendering Views
2.1. Nested View Directories
2.2. Creating The First Available View
2.3. Determining If A View Exists
3. Passing Data To Views
3.1. Sharing Data With All Views
4. View Composers
4.0.1. Attaching A Composer To Multiple Views
4.1. View Creators
5. Optimizing Views

8. Blade Templates

0. Blade Templates
1. Introduction
1.1. Supercharging Blade With Livewire
2. Displaying Data
2.1. HTML Entity Encoding
2.1.1. Displaying Unescaped Data
2.2. Blade & JavaScript Frameworks
2.2.1. Rendering JSON
2.2.2. The `@verbatim` Directive
3. Blade Directives
3.3. If Statements
3.3.1. Authentication Directives
3.3.2. Environment Directives
3.3.3. Section Directives
3.4. Switch Statements
3.5. Loops
3.6. The Loop Variable
3.7. Conditional Classes & Styles
3.8. Additional Attributes
3.9. Including Subviews
3.9.1. Rendering Views For Collections
3.10. The `@once` Directive
3.11. Raw PHP
3.12. Comments
4. Components
4.0.1. Manually Registering Package Components
4.1. Rendering Components
4.2. Passing Data To Components
4.2.1. Casing
4.2.2. Short Attribute Syntax
4.2.3. Escaping Attribute Rendering
4.2.4. Component Methods
4.2.5. Accessing Attributes & Slots Within Component Classes
4.2.6. Additional Dependencies
4.2.7. Hiding Attributes / Methods
4.3. Component Attributes
4.3.1. Default / Merged Attributes
4.3.2. Conditionally Merge Classes
4.3.3. Non-Class Attribute Merging
4.3.4. Retrieving & Filtering Attributes
4.4. Reserved Keywords
4.5. Slots
4.5.1. Scoped Slots
4.5.2. Slot Attributes
4.6. Inline Component Views
4.6.1. Generating Inline View Components
4.7. Dynamic Components
4.8. Manually Registering Components
4.8.1. Autoloading Package Components
5. Anonymous Components
5.9. Anonymous Index Components
5.10. Data Properties / Attributes
5.11. Accessing Parent Data
5.12. Anonymous Component Paths
6. Building Layouts
6.1. Layouts Using Components
6.1.1. Defining The Layout Component
6.1.2. Applying The Layout Component
6.2. Layouts Using Template Inheritance
6.2.1. Defining A Layout
6.2.2. Extending A Layout
7. Forms
7.3. CSRF Field
7.4. Method Field
7.5. Validation Errors
8. Stacks
9. Service Injection
10. Rendering Inline Blade Templates
11. Rendering Blade Fragments
12. Extending Blade
12.1. Custom Echo Handlers
12.2. Custom If Statements

9. Asset Bundling

0. Asset Bundling (Vite)
1. Introduction
1.0.1. Choosing Between Vite And Laravel Mix
1.0.2. Migrating Back To Mix
2. Installation & Setup
2.1. Installing Node
2.2. Installing Vite And The Laravel Plugin
2.3. Configuring Vite
2.3.1. Working With A Secure Development Server
2.4. Loading Your Scripts And Styles
3. Running Vite
4. Working With JavaScript
4.1. Aliases
4.2. Vue
4.3. React
4.4. Inertia
4.5. URL Processing
5. Working With Stylesheets
6. Working With Blade & Routes
6.1. Processing Static Assets With Vite
6.2. Refreshing On Save
6.3. Aliases
7. Custom Base URLs
8. Environment Variables
9. Disabling Vite In Tests
10. Server-Side Rendering (SSR)
11. Script & Style Tag Attributes
11.1. Content Security Policy (CSP) Nonce
11.2. Subresource Integrity (SRI)
11.3. Arbitrary Attributes
12. Advanced Customization
12.1. Correcting Dev Server URLs

10. URL Generation

0. URL Generation
1. Introduction
2. The Basics
2.1. Generating URLs
2.2. Accessing The Current URL
3. URLs For Named Routes
3.0.1. Eloquent Models
3.1. Signed URLs
3.1.1. Validating Signed Route Requests
3.1.2. Responding To Invalid Signed Routes
4. URLs For Controller Actions
5. Default Values
5.1.1. URL Defaults & Middleware Priority

11. Session

0. HTTP Session
1. Introduction
1.1. Configuration
1.2. Driver Prerequisites
1.2.1. Database
1.2.2. Redis
2. Interacting With The Session
2.3. Retrieving Data
2.3.1. The Global Session Helper
2.3.2. Retrieving All Session Data
2.3.3. Determining If An Item Exists In The Session
2.4. Storing Data
2.4.1. Pushing To Array Session Values
2.4.2. Retrieving & Deleting An Item
2.4.3. Incrementing & Decrementing Session Values
2.5. Flash Data
2.6. Deleting Data
2.7. Regenerating The Session ID
3. Session Blocking
4. Adding Custom Session Drivers
4.0.1. Implementing The Driver
4.0.2. Registering The Driver

12. Validation

0. Validation
1. Introduction
2. Validation Quickstart
2.1. Defining The Routes
2.2. Creating The Controller
2.3. Writing The Validation Logic
2.3.1. Stopping On First Validation Failure
2.3.2. A Note On Nested Attributes
2.4. Displaying The Validation Errors
2.4.1. Customizing The Error Messages
2.4.2. XHR Requests & Validation
2.4.3. The `@error` Directive
2.5. Repopulating Forms
2.6. A Note On Optional Fields
2.7. Validation Error Response Format
3. Form Request Validation
3.1. Creating Form Requests
3.1.1. Adding After Hooks To Form Requests
3.1.2. Stopping On First Validation Failure Attribute
3.1.3. Customizing The Redirect Location
3.2. Authorizing Form Requests
3.3. Customizing The Error Messages
3.3.1. Customizing The Validation Attributes
3.4. Preparing Input For Validation
4. Manually Creating Validators
4.0.1. Stopping On First Validation Failure
4.1. Automatic Redirection
4.2. Named Error Bags
4.3. Customizing The Error Messages
4.3.1. Specifying A Custom Message For A Given Attribute
4.3.2. Specifying Custom Attribute Values
4.4. After Validation Hook
5. Working With Validated Input
6. Working With Error Messages
6.0.1. Retrieving The First Error Message For A Field
6.0.2. Retrieving All Error Messages For A Field
6.0.3. Retrieving All Error Messages For All Fields
6.0.4. Determining If Messages Exist For A Field
6.1. Specifying Custom Messages In Language Files
6.1.1. Custom Messages For Specific Attributes
6.2. Specifying Attributes In Language Files
6.3. Specifying Values In Language Files
7. Available Validation Rules
7.0.1. accepted
7.0.2. accepted_if:anotherfield,value,...
7.0.3. active_url
7.0.4. after:_date_
7.0.5. after\_or\_equal:_date_
7.0.6. alpha
7.0.7. alpha_dash
7.0.8. alpha_num
7.0.9. array
7.0.10. ascii
7.0.11. bail
7.0.12. before:_date_
7.0.13. before\_or\_equal:_date_
7.0.14. between:_min_,_max_
7.0.15. boolean
7.0.16. confirmed
7.0.17. current_password
7.0.18. date
7.0.19. date_equals:_date_
7.0.20. date_format:_format_,...
7.0.21. decimal:_min_,_max_
7.0.22. declined
7.0.23. declined_if:anotherfield,value,...
7.0.24. different:_field_
7.0.25. digits:_value_
7.0.26. digits_between:_min_,_max_
7.0.27. dimensions
7.0.28. distinct
7.0.29. doesnt_start_with:_foo_,_bar_,...
7.0.30. doesnt_end_with:_foo_,_bar_,...
7.0.31. email
7.0.32. ends_with:_foo_,_bar_,...
7.0.33. enum
7.0.34. exclude
7.0.35. exclude_if:_anotherfield_,_value_
7.0.36. exclude_unless:_anotherfield_,_value_
7.0.37. exclude_with:_anotherfield_
7.0.38. exclude_without:_anotherfield_
7.0.39. exists:_table_,_column_
7.0.40. Basic Usage Of Exists Rule
7.0.41. Specifying A Custom Column Name
7.0.42. file
7.0.43. filled
7.0.44. gt:_field_
7.0.45. gte:_field_
7.0.46. image
7.0.47. in:_foo_,_bar_,...
7.0.48. in_array:_anotherfield_.*
7.0.49. integer
7.0.50. ip
7.0.51. ipv4
7.0.52. ipv6
7.0.53. json
7.0.54. lt:_field_
7.0.55. lte:_field_
7.0.56. lowercase
7.0.57. mac_address
7.0.58. max:_value_
7.0.59. max_digits:_value_
7.0.60. mimetypes:_text/plain_,...
7.0.61. mimes:_foo_,_bar_,...
7.0.62. Basic Usage Of MIME Rule
7.0.63. min:_value_
7.0.64. min_digits:_value_
7.0.65. multiple_of:_value_
7.0.66. missing
7.0.67. not_in:_foo_,_bar_,...
7.0.68. not_regex:_pattern_
7.0.69. nullable
7.0.70. numeric
7.0.71. password
7.0.72. present
7.0.73. prohibited
7.0.74. prohibited_if:_anotherfield_,_value_,...
7.0.75. prohibited_unless:_anotherfield_,_value_,...
7.0.76. prohibits:_anotherfield_,...
7.0.77. regex:_pattern_
7.0.78. required
7.0.79. required_if:_anotherfield_,_value_,...
7.0.80. required_unless:_anotherfield_,_value_,...
7.0.81. required_with:_foo_,_bar_,...
7.0.82. required_with_all:_foo_,_bar_,...
7.0.83. required_without:_foo_,_bar_,...
7.0.84. required_without_all:_foo_,_bar_,...
7.0.85. required_array_keys:_foo_,_bar_,...
7.0.86. same:_field_
7.0.87. size:_value_
7.0.88. starts_with:_foo_,_bar_,...
7.0.89. string
7.0.90. timezone
7.0.91. unique:_table_,_column_
7.0.92. uppercase
7.0.93. url
7.0.94. ulid
7.0.95. uuid
8. Conditionally Adding Rules
8.0.1. Skipping Validation When Fields Have Certain Values
8.0.2. Validating When Present
8.0.3. Complex Conditional Validation
8.0.4. Complex Conditional Array Validation
9. Validating Arrays
9.1. Validating Nested Array Input
9.1.1. Accessing Nested Array Data
9.2. Error Message Indexes & Positions
10. Validating Files
10.0.1. File Types
11. Validating Passwords
11.0.1. Defining Default Password Rules
12. Custom Validation Rules
12.1. Using Rule Objects
12.1.1. Translating Validation Messages
12.1.2. Accessing Additional Data
12.2. Using Closures
12.3. Implicit Rules

13. Error Handling

0. Error Handling
1. Introduction
2. Configuration
3. The Exception Handler
3.1. Reporting Exceptions
3.1.1. Global Log Context
3.1.2. Exception Log Context
3.1.3. The `report` Helper
3.2. Exception Log Levels
3.3. Ignoring Exceptions By Type
3.4. Rendering Exceptions
3.5. Reportable & Renderable Exceptions
4. HTTP Exceptions
4.1. Custom HTTP Error Pages
4.1.1. Fallback HTTP Error Pages

14. Logging

0. Logging
1. Introduction
2. Configuration
2.1.1. Configuring The Channel Name
2.2. Available Channel Drivers
2.3. Channel Prerequisites
2.3.1. Configuring The Single and Daily Channels
2.3.2. Configuring The Papertrail Channel
2.3.3. Configuring The Slack Channel
2.4. Logging Deprecation Warnings
3. Building Log Stacks
3.0.1. Log Levels
4. Writing Log Messages
4.1. Contextual Information
4.2. Writing To Specific Channels
4.2.1. On-Demand Channels
5. Monolog Channel Customization
5.3. Customizing Monolog For Channels
5.4. Creating Monolog Handler Channels
5.4.1. Monolog Formatters
5.5. Creating Custom Channels Via Factories

5. Digging Deeper

1. Artisan Console

0. Artisan Console
1. Introduction
1.0.1. Laravel Sail
1.1. Tinker (REPL)
1.1.1. Installation
1.1.2. Usage
1.1.3. Command Allow List
1.1.4. Classes That Should Not Be Aliased
2. Writing Commands
2.2. Generating Commands
2.3. Command Structure
2.4. Closure Commands
2.4.1. Type-Hinting Dependencies
2.4.2. Closure Command Descriptions
2.5. Isolatable Commands
2.5.1. Lock Expiration Time
3. Defining Input Expectations
3.6. Arguments
3.7. Options
3.7.1. Options With Values
3.7.2. Option Shortcuts
3.8. Input Arrays
3.8.1. Option Arrays
3.9. Input Descriptions
4. Command I/O
4.1. Retrieving Input
4.2. Prompting For Input
4.2.1. Asking For Confirmation
4.2.2. Auto-Completion
4.2.3. Multiple Choice Questions
4.3. Writing Output
4.3.1. Tables
4.3.2. Progress Bars
5. Registering Commands
6. Programmatically Executing Commands
6.3.1. Passing Array Values
6.3.2. Passing Boolean Values
6.3.3. Queueing Artisan Commands
6.4. Calling Commands From Other Commands
7. Signal Handling
8. Stub Customization
9. Events

2. Broadcasting

0. Broadcasting
1. Introduction
1.1.1. Supported Drivers
2. Server Side Installation
2.2. Configuration
2.2.1. Broadcast Service Provider
2.2.2. Queue Configuration
2.3. Pusher Channels
2.3.1. Open Source Pusher Alternatives
2.4. Ably
2.5. Open Source Alternatives
2.5.1. PHP
2.5.2. Node
3. Client Side Installation
3.6. Pusher Channels
3.6.1. Using An Existing Client Instance
3.7. Ably
4. Concept Overview
4.1. Using An Example Application
4.1.1. The `ShouldBroadcast` Interface
4.1.2. Authorizing Channels
4.1.3. Listening For Event Broadcasts
5. Defining Broadcast Events
5.2. Broadcast Name
5.3. Broadcast Data
5.4. Broadcast Queue
5.5. Broadcast Conditions
5.5.1. Broadcasting & Database Transactions
6. Authorizing Channels
6.6. Defining Authorization Routes
6.6.1. Customizing The Authorization Endpoint
6.6.2. Customizing The Authorization Request
6.7. Defining Authorization Callbacks
6.7.1. Authorization Callback Model Binding
6.7.2. Authorization Callback Authentication
6.8. Defining Channel Classes
7. Broadcasting Events
7.1. Only To Others
7.1.1. Configuration
7.2. Customizing The Connection
8. Receiving Broadcasts
8.1. Listening For Events
8.1.1. Stop Listening For Events
8.2. Leaving A Channel
8.3. Namespaces
9. Presence Channels
9.1. Authorizing Presence Channels
9.2. Joining Presence Channels
9.3. Broadcasting To Presence Channels
10. Model Broadcasting
10.0.1. Customizing Model Broadcasting Event Creation
10.1. Model Broadcasting Conventions
10.1.1. Channel Conventions
10.1.2. Event Conventions
10.2. Listening For Model Broadcasts
11. Client Events
12. Notifications

3. Cache

0. Cache
1. Introduction
2. Configuration
2.1. Driver Prerequisites
2.1.1. Database
2.1.2. Memcached
2.1.3. Redis
2.1.4. DynamoDB
3. Cache Usage
3.2. Obtaining A Cache Instance
3.2.1. Accessing Multiple Cache Stores
3.3. Retrieving Items From The Cache
3.3.1. Checking For Item Existence
3.3.2. Incrementing / Decrementing Values
3.3.3. Retrieve & Store
3.3.4. Retrieve & Delete
3.4. Storing Items In The Cache
3.4.1. Store If Not Present
3.4.2. Storing Items Forever
3.5. Removing Items From The Cache
3.6. The Cache Helper
4. Cache Tags
4.1. Storing Tagged Cache Items
4.2. Accessing Tagged Cache Items
4.3. Removing Tagged Cache Items
4.4. Pruning Stale Cache Tags
5. Atomic Locks
5.1. Driver Prerequisites
5.1.1. Database
5.2. Managing Locks
5.3. Managing Locks Across Processes
6. Adding Custom Cache Drivers
6.1. Writing The Driver
6.2. Registering The Driver
7. Events

4. Collections

0. Collections
1. Introduction
1.1. Creating Collections
1.2. Extending Collections
1.2.1. Macro Arguments
2. Available Methods
3. Method Listing
3.2.1. `all()` {.collection-method .first-collection-method}
3.2.2. `average()` {.collection-method}
3.2.3. `avg()` {.collection-method}
3.2.4. `chunk()` {.collection-method}
3.2.5. `chunkWhile()` {.collection-method}
3.2.6. `collapse()` {.collection-method}
3.2.7. `collect()` {.collection-method}
3.2.8. `combine()` {.collection-method}
3.2.9. `concat()` {.collection-method}
3.2.10. `contains()` {.collection-method}
3.2.11. `containsOneItem()` {.collection-method}
3.2.12. `containsStrict()` {.collection-method}
3.2.13. `count()` {.collection-method}
3.2.14. `countBy()` {.collection-method}
3.2.15. `crossJoin()` {.collection-method}
3.2.16. `dd()` {.collection-method}
3.2.17. `diff()` {.collection-method}
3.2.18. `diffAssoc()` {.collection-method}
3.2.19. `diffKeys()` {.collection-method}
3.2.20. `doesntContain()` {.collection-method}
3.2.21. `dump()` {.collection-method}
3.2.22. `duplicates()` {.collection-method}
3.2.23. `duplicatesStrict()` {.collection-method}
3.2.24. `each()` {.collection-method}
3.2.25. `eachSpread()` {.collection-method}
3.2.26. `every()` {.collection-method}
3.2.27. `except()` {.collection-method}
3.2.28. `filter()` {.collection-method}
3.2.29. `first()` {.collection-method}
3.2.30. `firstOrFail()` {.collection-method}
3.2.31. `firstWhere()` {.collection-method}
3.2.32. `flatMap()` {.collection-method}
3.2.33. `flatten()` {.collection-method}
3.2.34. `flip()` {.collection-method}
3.2.35. `forget()` {.collection-method}
3.2.36. `forPage()` {.collection-method}
3.2.37. `get()` {.collection-method}
3.2.38. `groupBy()` {.collection-method}
3.2.39. `has()` {.collection-method}
3.2.40. `hasAny()` {.collection-method}
3.2.41. `implode()` {.collection-method}
3.2.42. `intersect()` {.collection-method}
3.2.43. `intersectByKeys()` {.collection-method}
3.2.44. `isEmpty()` {.collection-method}
3.2.45. `isNotEmpty()` {.collection-method}
3.2.46. `join()` {.collection-method}
3.2.47. `keyBy()` {.collection-method}
3.2.48. `keys()` {.collection-method}
3.2.49. `last()` {.collection-method}
3.2.50. `lazy()` {.collection-method}
3.2.51. `macro()` {.collection-method}
3.2.52. `make()` {.collection-method}
3.2.53. `map()` {.collection-method}
3.2.54. `mapInto()` {.collection-method}
3.2.55. `mapSpread()` {.collection-method}
3.2.56. `mapToGroups()` {.collection-method}
3.2.57. `mapWithKeys()` {.collection-method}
3.2.58. `max()` {.collection-method}
3.2.59. `median()` {.collection-method}
3.2.60. `merge()` {.collection-method}
3.2.61. `mergeRecursive()` {.collection-method}
3.2.62. `min()` {.collection-method}
3.2.63. `mode()` {.collection-method}
3.2.64. `nth()` {.collection-method}
3.2.65. `only()` {.collection-method}
3.2.66. `pad()` {.collection-method}
3.2.67. `partition()` {.collection-method}
3.2.68. `pipe()` {.collection-method}
3.2.69. `pipeInto()` {.collection-method}
3.2.70. `pipeThrough()` {.collection-method}
3.2.71. `pluck()` {.collection-method}
3.2.72. `pop()` {.collection-method}
3.2.73. `prepend()` {.collection-method}
3.2.74. `pull()` {.collection-method}
3.2.75. `push()` {.collection-method}
3.2.76. `put()` {.collection-method}
3.2.77. `random()` {.collection-method}
3.2.78. `range()` {.collection-method}
3.2.79. `reduce()` {.collection-method}
3.2.80. `reduceSpread()` {.collection-method}
3.2.81. `reject()` {.collection-method}
3.2.82. `replace()` {.collection-method}
3.2.83. `replaceRecursive()` {.collection-method}
3.2.84. `reverse()` {.collection-method}
3.2.85. `search()` {.collection-method}
3.2.86. `shift()` {.collection-method}
3.2.87. `shuffle()` {.collection-method}
3.2.88. `skip()` {.collection-method}
3.2.89. `skipUntil()` {.collection-method}
3.2.90. `skipWhile()` {.collection-method}
3.2.91. `slice()` {.collection-method}
3.2.92. `sliding()` {.collection-method}
3.2.93. `sole()` {.collection-method}
3.2.94. `some()` {.collection-method}
3.2.95. `sort()` {.collection-method}
3.2.96. `sortBy()` {.collection-method}
3.2.97. `sortByDesc()` {.collection-method}
3.2.98. `sortDesc()` {.collection-method}
3.2.99. `sortKeys()` {.collection-method}
3.2.100. `sortKeysDesc()` {.collection-method}
3.2.101. `sortKeysUsing()` {.collection-method}
3.2.102. `splice()` {.collection-method}
3.2.103. `split()` {.collection-method}
3.2.104. `splitIn()` {.collection-method}
3.2.105. `sum()` {.collection-method}
3.2.106. `take()` {.collection-method}
3.2.107. `takeUntil()` {.collection-method}
3.2.108. `takeWhile()` {.collection-method}
3.2.109. `tap()` {.collection-method}
3.2.110. `times()` {.collection-method}
3.2.111. `toArray()` {.collection-method}
3.2.112. `toJson()` {.collection-method}
3.2.113. `transform()` {.collection-method}
3.2.114. `undot()` {.collection-method}
3.2.115. `union()` {.collection-method}
3.2.116. `unique()` {.collection-method}
3.2.117. `uniqueStrict()` {.collection-method}
3.2.118. `unless()` {.collection-method}
3.2.119. `unlessEmpty()` {.collection-method}
3.2.120. `unlessNotEmpty()` {.collection-method}
3.2.121. `unwrap()` {.collection-method}
3.2.122. `value()` {.collection-method}
3.2.123. `values()` {.collection-method}
3.2.124. `when()` {.collection-method}
3.2.125. `whenEmpty()` {.collection-method}
3.2.126. `whenNotEmpty()` {.collection-method}
3.2.127. `where()` {.collection-method}
3.2.128. `whereStrict()` {.collection-method}
3.2.129. `whereBetween()` {.collection-method}
3.2.130. `whereIn()` {.collection-method}
3.2.131. `whereInStrict()` {.collection-method}
3.2.132. `whereInstanceOf()` {.collection-method}
3.2.133. `whereNotBetween()` {.collection-method}
3.2.134. `whereNotIn()` {.collection-method}
3.2.135. `whereNotInStrict()` {.collection-method}
3.2.136. `whereNotNull()` {.collection-method}
3.2.137. `whereNull()` {.collection-method}
3.2.138. `wrap()` {.collection-method}
3.2.139. `zip()` {.collection-method}
4. Higher Order Messages
5. Lazy Collections
5.3. Introduction
5.4. Creating Lazy Collections
5.5. The Enumerable Contract
5.6. Lazy Collection Methods
5.6.1. `takeUntilTimeout()` {.collection-method}
5.6.2. `tapEach()` {.collection-method}
5.6.3. `remember()` {.collection-method}

5. Contracts

0. Contracts
1. Introduction
1.1. Contracts Vs. Facades
2. When To Use Contracts
3. How To Use Contracts
4. Contract Reference

6. Events

0. Events
1. Introduction
2. Registering Events & Listeners
2.1. Generating Events & Listeners
2.2. Manually Registering Events
2.2.1. Queueable Anonymous Event Listeners
2.2.2. Wildcard Event Listeners
2.3. Event Discovery
2.3.1. Event Discovery In Production
3. Defining Events
4. Defining Listeners
4.3.1. Stopping The Propagation Of An Event
5. Queued Event Listeners
5.3.1. Customizing The Queue Connection & Queue Name
5.3.2. Conditionally Queueing Listeners
5.4. Manually Interacting With The Queue
5.5. Queued Event Listeners & Database Transactions
5.6. Handling Failed Jobs
5.6.1. Specifying Queued Listener Maximum Attempts
6. Dispatching Events
7. Event Subscribers
7.7. Writing Event Subscribers
7.8. Registering Event Subscribers
8. Testing
8.1. Faking A Subset Of Events
8.2. Scoped Event Fakes

7. File Storage

0. File Storage
1. Introduction
2. Configuration
2.1. The Local Driver
2.2. The Public Disk
2.3. Driver Prerequisites
2.3.1. S3 Driver Configuration
2.3.2. FTP Driver Configuration
2.3.3. SFTP Driver Configuration
2.4. Scoped & Read-Only Filesystems
2.5. Amazon S3 Compatible Filesystems
2.5.1. MinIO
3. Obtaining Disk Instances
3.6. On-Demand Disks
4. Retrieving Files
4.1. Downloading Files
4.2. File URLs
4.2.1. Temporary URLs
4.2.2. URL Host Customization
4.3. File Metadata
4.3.1. File Paths
5. Storing Files
5.3.1. Failed Writes
5.4. Prepending & Appending To Files
5.5. Copying & Moving Files
5.6. Automatic Streaming
5.7. File Uploads
5.7.1. Specifying A File Name
5.7.2. Specifying A Disk
5.7.3. Other Uploaded File Information
5.8. File Visibility
5.8.1. Local Files & Visibility
6. Deleting Files
7. Directories
7.8.1. Get All Files Within A Directory
7.8.2. Get All Directories Within A Directory
7.8.3. Create A Directory
7.8.4. Delete A Directory
8. Testing
9. Custom Filesystems

8. Helpers

0. Helpers
1. Introduction
2. Available Methods
2.1. Arrays & Objects
2.2. Paths
2.3. Strings
2.4. Fluent Strings
2.5. URLs
2.6. Miscellaneous
3. Method Listing
4. Arrays & Objects
4.0.1. `Arr::accessible()` {.collection-method .first-collection-method}
4.0.2. `Arr::add()` {.collection-method}
4.0.3. `Arr::collapse()` {.collection-method}
4.0.4. `Arr::crossJoin()` {.collection-method}
4.0.5. `Arr::divide()` {.collection-method}
4.0.6. `Arr::dot()` {.collection-method}
4.0.7. `Arr::except()` {.collection-method}
4.0.8. `Arr::exists()` {.collection-method}
4.0.9. `Arr::first()` {.collection-method}
4.0.10. `Arr::flatten()` {.collection-method}
4.0.11. `Arr::forget()` {.collection-method}
4.0.12. `Arr::get()` {.collection-method}
4.0.13. `Arr::has()` {.collection-method}
4.0.14. `Arr::hasAny()` {.collection-method}
4.0.15. `Arr::isAssoc()` {.collection-method}
4.0.16. `Arr::isList()` {.collection-method}
4.0.17. `Arr::join()` {.collection-method}
4.0.18. `Arr::keyBy()` {.collection-method}
4.0.19. `Arr::last()` {.collection-method}
4.0.20. `Arr::map()` {.collection-method}
4.0.21. `Arr::only()` {.collection-method}
4.0.22. `Arr::pluck()` {.collection-method}
4.0.23. `Arr::prepend()` {.collection-method}
4.0.24. `Arr::prependKeysWith()` {.collection-method}
4.0.25. `Arr::pull()` {.collection-method}
4.0.26. `Arr::query()` {.collection-method}
4.0.27. `Arr::random()` {.collection-method}
4.0.28. `Arr::set()` {.collection-method}
4.0.29. `Arr::shuffle()` {.collection-method}
4.0.30. `Arr::sort()` {.collection-method}
4.0.31. `Arr::sortDesc()` {.collection-method}
4.0.32. `Arr::sortRecursive()` {.collection-method}
4.0.33. `Arr::toCssClasses()` {.collection-method}
4.0.34. `Arr::undot()` {.collection-method}
4.0.35. `Arr::where()` {.collection-method}
4.0.36. `Arr::whereNotNull()` {.collection-method}
4.0.37. `Arr::wrap()` {.collection-method}
4.0.38. `data_fill()` {.collection-method}
4.0.39. `data_get()` {.collection-method}
4.0.40. `data_set()` {.collection-method}
4.0.41. `head()` {.collection-method}
4.0.42. `last()` {.collection-method}
5. Paths
5.0.1. `app_path()` {.collection-method}
5.0.2. `base_path()` {.collection-method}
5.0.3. `config_path()` {.collection-method}
5.0.4. `database_path()` {.collection-method}
5.0.5. `lang_path()` {.collection-method}
5.0.6. `mix()` {.collection-method}
5.0.7. `public_path()` {.collection-method}
5.0.8. `resource_path()` {.collection-method}
5.0.9. `storage_path()` {.collection-method}
6. Strings
6.0.1. `__()` {.collection-method}
6.0.2. `class_basename()` {.collection-method}
6.0.3. `e()` {.collection-method}
6.0.4. `preg_replace_array()` {.collection-method}
6.0.5. `Str::after()` {.collection-method}
6.0.6. `Str::afterLast()` {.collection-method}
6.0.7. `Str::ascii()` {.collection-method}
6.0.8. `Str::before()` {.collection-method}
6.0.9. `Str::beforeLast()` {.collection-method}
6.0.10. `Str::between()` {.collection-method}
6.0.11. `Str::betweenFirst()` {.collection-method}
6.0.12. `Str::camel()` {.collection-method}
6.0.13. `Str::contains()` {.collection-method}
6.0.14. `Str::containsAll()` {.collection-method}
6.0.15. `Str::endsWith()` {.collection-method}
6.0.16. `Str::excerpt()` {.collection-method}
6.0.17. `Str::finish()` {.collection-method}
6.0.18. `Str::headline()` {.collection-method}
6.0.19. `Str::inlineMarkdown()` {.collection-method}
6.0.20. `Str::is()` {.collection-method}
6.0.21. `Str::isAscii()` {.collection-method}
6.0.22. `Str::isJson()` {.collection-method}
6.0.23. `Str::isUlid()` {.collection-method}
6.0.24. `Str::isUuid()` {.collection-method}
6.0.25. `Str::kebab()` {.collection-method}
6.0.26. `Str::lcfirst()` {.collection-method}
6.0.27. `Str::length()` {.collection-method}
6.0.28. `Str::limit()` {.collection-method}
6.0.29. `Str::lower()` {.collection-method}
6.0.30. `Str::markdown()` {.collection-method}
6.0.31. `Str::mask()` {.collection-method}
6.0.32. `Str::orderedUuid()` {.collection-method}
6.0.33. `Str::padBoth()` {.collection-method}
6.0.34. `Str::padLeft()` {.collection-method}
6.0.35. `Str::padRight()` {.collection-method}
6.0.36. `Str::password()` {.collection-method}
6.0.37. `Str::plural()` {.collection-method}
6.0.38. `Str::pluralStudly()` {.collection-method}
6.0.39. `Str::random()` {.collection-method}
6.0.40. `Str::remove()` {.collection-method}
6.0.41. `Str::replace()` {.collection-method}
6.0.42. `Str::replaceArray()` {.collection-method}
6.0.43. `Str::replaceFirst()` {.collection-method}
6.0.44. `Str::replaceLast()` {.collection-method}
6.0.45. `Str::reverse()` {.collection-method}
6.0.46. `Str::singular()` {.collection-method}
6.0.47. `Str::slug()` {.collection-method}
6.0.48. `Str::snake()` {.collection-method}
6.0.49. `Str::squish()` {.collection-method}
6.0.50. `Str::start()` {.collection-method}
6.0.51. `Str::startsWith()` {.collection-method}
6.0.52. `Str::studly()` {.collection-method}
6.0.53. `Str::substr()` {.collection-method}
6.0.54. `Str::substrCount()` {.collection-method}
6.0.55. `Str::substrReplace()` {.collection-method}
6.0.56. `Str::swap()` {.collection-method}
6.0.57. `Str::title()` {.collection-method}
6.0.58. `Str::toHtmlString()` {.collection-method}
6.0.59. `Str::ucfirst()` {.collection-method}
6.0.60. `Str::ucsplit()` {.collection-method}
6.0.61. `Str::upper()` {.collection-method}
6.0.62. `Str::ulid()` {.collection-method}
6.0.63. `Str::uuid()` {.collection-method}
6.0.64. `Str::wordCount()` {.collection-method}
6.0.65. `Str::words()` {.collection-method}
6.0.66. `str()` {.collection-method}
6.0.67. `trans()` {.collection-method}
6.0.68. `trans_choice()` {.collection-method}
7. Fluent Strings
7.0.1. `after` {.collection-method}
7.0.2. `afterLast` {.collection-method}
7.0.3. `append` {.collection-method}
7.0.4. `ascii` {.collection-method}
7.0.5. `basename` {.collection-method}
7.0.6. `before` {.collection-method}
7.0.7. `beforeLast` {.collection-method}
7.0.8. `between` {.collection-method}
7.0.9. `betweenFirst` {.collection-method}
7.0.10. `camel` {.collection-method}
7.0.11. `classBasename` {.collection-method}
7.0.12. `contains` {.collection-method}
7.0.13. `containsAll` {.collection-method}
7.0.14. `dirname` {.collection-method}
7.0.15. `excerpt` {.collection-method}
7.0.16. `endsWith` {.collection-method}
7.0.17. `exactly` {.collection-method}
7.0.18. `explode` {.collection-method}
7.0.19. `finish` {.collection-method}
7.0.20. `headline` {.collection-method}
7.0.21. `inlineMarkdown` {.collection-method}
7.0.22. `is` {.collection-method}
7.0.23. `isAscii` {.collection-method}
7.0.24. `isEmpty` {.collection-method}
7.0.25. `isNotEmpty` {.collection-method}
7.0.26. `isJson` {.collection-method}
7.0.27. `isUlid` {.collection-method}
7.0.28. `isUuid` {.collection-method}
7.0.29. `kebab` {.collection-method}
7.0.30. `lcfirst` {.collection-method}
7.0.31. `length` {.collection-method}
7.0.32. `limit` {.collection-method}
7.0.33. `lower` {.collection-method}
7.0.34. `ltrim` {.collection-method}
7.0.35. `markdown` {.collection-method}
7.0.36. `mask` {.collection-method}
7.0.37. `match` {.collection-method}
7.0.38. `matchAll` {.collection-method}
7.0.39. `newLine` {.collection-method}
7.0.40. `padBoth` {.collection-method}
7.0.41. `padLeft` {.collection-method}
7.0.42. `padRight` {.collection-method}
7.0.43. `pipe` {.collection-method}
7.0.44. `plural` {.collection-method}
7.0.45. `prepend` {.collection-method}
7.0.46. `remove` {.collection-method}
7.0.47. `replace` {.collection-method}
7.0.48. `replaceArray` {.collection-method}
7.0.49. `replaceFirst` {.collection-method}
7.0.50. `replaceLast` {.collection-method}
7.0.51. `replaceMatches` {.collection-method}
7.0.52. `rtrim` {.collection-method}
7.0.53. `scan` {.collection-method}
7.0.54. `singular` {.collection-method}
7.0.55. `slug` {.collection-method}
7.0.56. `snake` {.collection-method}
7.0.57. `split` {.collection-method}
7.0.58. `squish` {.collection-method}
7.0.59. `start` {.collection-method}
7.0.60. `startsWith` {.collection-method}
7.0.61. `studly` {.collection-method}
7.0.62. `substr` {.collection-method}
7.0.63. `substrReplace` {.collection-method}
7.0.64. `swap` {.collection-method}
7.0.65. `tap` {.collection-method}
7.0.66. `test` {.collection-method}
7.0.67. `title` {.collection-method}
7.0.68. `trim` {.collection-method}
7.0.69. `ucfirst` {.collection-method}
7.0.70. `ucsplit` {.collection-method}
7.0.71. `upper` {.collection-method}
7.0.72. `when` {.collection-method}
7.0.73. `whenContains` {.collection-method}
7.0.74. `whenContainsAll` {.collection-method}
7.0.75. `whenEmpty` {.collection-method}
7.0.76. `whenNotEmpty` {.collection-method}
7.0.77. `whenStartsWith` {.collection-method}
7.0.78. `whenEndsWith` {.collection-method}
7.0.79. `whenExactly` {.collection-method}
7.0.80. `whenNotExactly` {.collection-method}
7.0.81. `whenIs` {.collection-method}
7.0.82. `whenIsAscii` {.collection-method}
7.0.83. `whenIsUlid` {.collection-method}
7.0.84. `whenIsUuid` {.collection-method}
7.0.85. `whenTest` {.collection-method}
7.0.86. `wordCount` {.collection-method}
7.0.87. `words` {.collection-method}
8. URLs
8.0.1. `action()` {.collection-method}
8.0.2. `asset()` {.collection-method}
8.0.3. `route()` {.collection-method}
8.0.4. `secure_asset()` {.collection-method}
8.0.5. `secure_url()` {.collection-method}
8.0.6. `to_route()` {.collection-method}
8.0.7. `url()` {.collection-method}
9. Miscellaneous
9.0.1. `abort()` {.collection-method}
9.0.2. `abort_if()` {.collection-method}
9.0.3. `abort_unless()` {.collection-method}
9.0.4. `app()` {.collection-method}
9.0.5. `auth()` {.collection-method}
9.0.6. `back()` {.collection-method}
9.0.7. `bcrypt()` {.collection-method}
9.0.8. `blank()` {.collection-method}
9.0.9. `broadcast()` {.collection-method}
9.0.10. `cache()` {.collection-method}
9.0.11. `class_uses_recursive()` {.collection-method}
9.0.12. `collect()` {.collection-method}
9.0.13. `config()` {.collection-method}
9.0.14. `cookie()` {.collection-method}
9.0.15. `csrf_field()` {.collection-method}
9.0.16. `csrf_token()` {.collection-method}
9.0.17. `decrypt()` {.collection-method}
9.0.18. `dd()` {.collection-method}
9.0.19. `dispatch()` {.collection-method}
9.0.20. `dump()` {.collection-method}
9.0.21. `encrypt()` {.collection-method}
9.0.22. `env()` {.collection-method}
9.0.23. `event()` {.collection-method}
9.0.24. `fake()` {.collection-method}
9.0.25. `filled()` {.collection-method}
9.0.26. `info()` {.collection-method}
9.0.27. `logger()` {.collection-method}
9.0.28. `method_field()` {.collection-method}
9.0.29. `now()` {.collection-method}
9.0.30. `old()` {.collection-method}
9.0.31. `optional()` {.collection-method}
9.0.32. `policy()` {.collection-method}
9.0.33. `redirect()` {.collection-method}
9.0.34. `report()` {.collection-method}
9.0.35. `report_if()` {.collection-method}
9.0.36. `report_unless()` {.collection-method}
9.0.37. `request()` {.collection-method}
9.0.38. `rescue()` {.collection-method}
9.0.39. `resolve()` {.collection-method}
9.0.40. `response()` {.collection-method}
9.0.41. `retry()` {.collection-method}
9.0.42. `session()` {.collection-method}
9.0.43. `tap()` {.collection-method}
9.0.44. `throw_if()` {.collection-method}
9.0.45. `throw_unless()` {.collection-method}
9.0.46. `today()` {.collection-method}
9.0.47. `trait_uses_recursive()` {.collection-method}
9.0.48. `transform()` {.collection-method}
9.0.49. `validator()` {.collection-method}
9.0.50. `value()` {.collection-method}
9.0.51. `view()` {.collection-method}
9.0.52. `with()` {.collection-method}
10. Other Utilities
10.1. Benchmarking
10.2. Lottery
10.2.1. Testing Lotteries

9. HTTP Client

0. HTTP Client
1. Introduction
2. Making Requests
2.1.1. URI Templates
2.1.2. Dumping Requests
2.2. Request Data
2.2.1. GET Request Query Parameters
2.2.2. Sending Form URL Encoded Requests
2.2.3. Sending A Raw Request Body
2.2.4. Multi-Part Requests
2.3. Headers
2.4. Authentication
2.4.1. Bearer Tokens
2.5. Timeout
2.6. Retries
2.7. Error Handling
2.7.1. Throwing Exceptions
2.8. Guzzle Middleware
2.9. Guzzle Options
3. Concurrent Requests
4. Macros
5. Testing
5.1. Faking Responses
5.1.1. Faking Specific URLs
5.1.2. Faking Response Sequences
5.1.3. Fake Callback
5.2. Preventing Stray Requests
5.3. Inspecting Requests
5.3.1. Recording Requests / Responses
6. Events

10. Localization

0. Localization
1. Introduction
1.1. Publishing The Language Files
1.2. Configuring The Locale
1.2.1. Determining The Current Locale
1.3. Pluralization Language
2. Defining Translation Strings
2.1. Using Short Keys
2.2. Using Translation Strings As Keys
2.2.1. Key / File Conflicts
3. Retrieving Translation Strings
3.3. Replacing Parameters In Translation Strings
3.3.1. Object Replacement Formatting
3.4. Pluralization
4. Overriding Package Language Files

11. Mail

0. Mail
1. Introduction
1.1. Configuration
1.2. Driver / Transport Prerequisites
1.2.1. Mailgun Driver
1.2.2. Postmark Driver
1.2.3. SES Driver
1.3. Failover Configuration
2. Generating Mailables
3. Writing Mailables
3.1. Configuring The Sender
3.1.1. Using The Envelope
3.1.2. Using A Global `from` Address
3.2. Configuring The View
3.2.1. Plain Text Emails
3.3. View Data
3.3.1. Via Public Properties
3.3.2. Via The `with` Parameter:
3.4. Attachments
3.4.1. Attaching Files From Disk
3.4.2. Raw Data Attachments
3.5. Inline Attachments
3.5.1. Embedding Raw Data Attachments
3.6. Attachable Objects
3.7. Headers
3.8. Tags & Metadata
3.9. Customizing The Symfony Message
4. Markdown Mailables
4.1. Generating Markdown Mailables
4.2. Writing Markdown Messages
4.2.1. Button Component
4.2.2. Panel Component
4.2.3. Table Component
4.3. Customizing The Components
4.3.1. Customizing The CSS
5. Sending Mail
5.3.1. Looping Over Recipients
5.3.2. Sending Mail Via A Specific Mailer
5.4. Queueing Mail
5.4.1. Queueing A Mail Message
5.4.2. Delayed Message Queueing
5.4.3. Pushing To Specific Queues
5.4.4. Queueing By Default
5.4.5. Queued Mailables & Database Transactions
6. Rendering Mailables
6.5. Previewing Mailables In The Browser
7. Localizing Mailables
7.1. User Preferred Locales
8. Testing
8.1. Testing Mailable Content
8.2. Testing Mailable Sending
9. Mail & Local Development
9.0.1. Log Driver
9.0.2. HELO / Mailtrap / Mailpit
9.0.3. Using A Global `to` Address
10. Events
11. Custom Transports
11.1. Additional Symfony Transports

12. Notifications

0. Notifications
1. Introduction
2. Generating Notifications
3. Sending Notifications
3.1. Using The Notifiable Trait
3.2. Using The Notification Facade
3.3. Specifying Delivery Channels
3.4. Queueing Notifications
3.4.1. Delaying Notifications
3.4.2. Delaying Notifications Per Channel
3.4.3. Customizing The Notification Queue Connection
3.4.4. Customizing Notification Channel Queues
3.4.5. Queued Notifications & Database Transactions
3.4.6. Determining If A Queued Notification Should Be Sent
3.5. On-Demand Notifications
4. Mail Notifications
4.1. Formatting Mail Messages
4.1.1. Error Messages
4.1.2. Other Mail Notification Formatting Options
4.2. Customizing The Sender
4.3. Customizing The Recipient
4.4. Customizing The Subject
4.5. Customizing The Mailer
4.6. Customizing The Templates
4.7. Attachments
4.7.1. Raw Data Attachments
4.8. Adding Tags & Metadata
4.9. Customizing The Symfony Message
4.10. Using Mailables
4.10.1. Mailables & On-Demand Notifications
4.11. Previewing Mail Notifications
5. Markdown Mail Notifications
5.1. Generating The Message
5.2. Writing The Message
5.2.1. Button Component
5.2.2. Panel Component
5.2.3. Table Component
5.3. Customizing The Components
5.3.1. Customizing The CSS
6. Database Notifications
6.4. Prerequisites
6.5. Formatting Database Notifications
6.5.1. `toDatabase` Vs. `toArray`
6.6. Accessing The Notifications
6.7. Marking Notifications As Read
7. Broadcast Notifications
7.1. Prerequisites
7.2. Formatting Broadcast Notifications
7.2.1. Broadcast Queue Configuration
7.2.2. Customizing The Notification Type
7.3. Listening For Notifications
7.3.1. Customizing The Notification Channel
8. SMS Notifications
8.4. Prerequisites
8.5. Formatting SMS Notifications
8.5.1. Unicode Content
8.6. Customizing The "From" Number
8.7. Adding a Client Reference
8.8. Routing SMS Notifications
9. Slack Notifications
9.1. Prerequisites
9.2. Formatting Slack Notifications
9.3. Slack Attachments
9.3.1. Markdown Attachment Content
9.4. Routing Slack Notifications
10. Localizing Notifications
10.1. User Preferred Locales
11. Testing
11.0.1. On-Demand Notifications
12. Notification Events
12.0.1. Notification Sending Event
12.0.2. Notification Sent Event
13. Custom Channels

13. Package Development

0. Package Development
1. Introduction
1.1. A Note On Facades
2. Package Discovery
2.1. Opting Out Of Package Discovery
3. Service Providers
4. Resources
4.1. Configuration
4.1.1. Default Package Configuration
4.2. Routes
4.3. Migrations
4.4. Language Files
4.4.1. Publishing Language Files
4.5. Views
4.5.1. Overriding Package Views
4.5.2. Publishing Views
4.6. View Components
4.6.1. Autoloading Package Components
4.6.2. Anonymous Components
4.7. "About" Artisan Command
5. Commands
6. Public Assets
7. Publishing File Groups

14. Processes

0. Processes
1. Introduction
2. Invoking Processes
2.1.1. Throwing Exceptions
2.2. Process Options
2.2.1. Working Directory Path
2.2.2. Timeouts
2.2.3. Environment Variables
2.2.4. TTY Mode
2.3. Process Output
2.3.1. Disabling Process Output
3. Asynchronous Processes
3.4. Process IDs & Signals
3.5. Asynchronous Process Output
4. Concurrent Processes
4.1. Naming Pool Processes
4.2. Pool Process IDs & Signals
5. Testing
5.1. Faking Processes
5.2. Faking Specific Processes
5.3. Faking Process Sequences
5.4. Faking Asynchronous Process Lifecycles
5.5. Available Assertions
5.5.1. assertRan
5.5.2. assertDidntRun
5.5.3. assertRanTimes
5.6. Preventing Stray Processes

15. Queues

0. Queues
1. Introduction
1.1. Connections Vs. Queues
1.2. Driver Notes & Prerequisites
1.2.1. Database
1.2.2. Redis
1.2.3. Other Driver Prerequisites
2. Creating Jobs
2.3. Generating Job Classes
2.4. Class Structure
2.4.1. `handle` Method Dependency Injection
2.4.2. Queued Relationships
2.5. Unique Jobs
2.5.1. Keeping Jobs Unique Until Processing Begins
2.5.2. Unique Job Locks
3. Job Middleware
3.6. Rate Limiting
3.7. Preventing Job Overlaps
3.7.1. Sharing Lock Keys Across Job Classes
3.8. Throttling Exceptions
4. Dispatching Jobs
4.1. Delayed Dispatching
4.1.1. Dispatching After The Response Is Sent To Browser
4.2. Synchronous Dispatching
4.3. Jobs & Database Transactions
4.3.1. Specifying Commit Dispatch Behavior Inline
4.4. Job Chaining
4.4.1. Chain Connection & Queue
4.4.2. Chain Failures
4.5. Customizing The Queue & Connection
4.5.1. Dispatching To A Particular Queue
4.5.2. Dispatching To A Particular Connection
4.6. Specifying Max Job Attempts / Timeout Values
4.6.1. Max Attempts
4.6.2. Time Based Attempts
4.6.3. Max Exceptions
4.6.4. Timeout
4.6.5. Failing On Timeout
4.7. Error Handling
4.7.1. Manually Releasing A Job
4.7.2. Manually Failing A Job
5. Job Batching
5.8. Defining Batchable Jobs
5.9. Dispatching Batches
5.9.1. Naming Batches
5.9.2. Batch Connection & Queue
5.9.3. Chains Within Batches
5.10. Adding Jobs To Batches
5.11. Inspecting Batches
5.11.1. Returning Batches From Routes
5.12. Cancelling Batches
5.13. Batch Failures
5.13.1. Allowing Failures
5.13.2. Retrying Failed Batch Jobs
5.14. Pruning Batches
6. Queueing Closures
7. Running The Queue Worker
7.1. The `queue:work` Command
7.1.1. Running Multiple Queue Workers
7.1.2. Specifying The Connection & Queue
7.1.3. Processing A Specified Number Of Jobs
7.1.4. Processing All Queued Jobs & Then Exiting
7.1.5. Processing Jobs For A Given Number Of Seconds
7.1.6. Worker Sleep Duration
7.1.7. Resource Considerations
7.2. Queue Priorities
7.3. Queue Workers & Deployment
7.4. Job Expirations & Timeouts
7.4.1. Job Expiration
7.4.2. Worker Timeouts
8. Supervisor Configuration
8.4.1. Installing Supervisor
8.4.2. Configuring Supervisor
8.4.3. Starting Supervisor
9. Dealing With Failed Jobs
9.5. Cleaning Up After Failed Jobs
9.6. Retrying Failed Jobs
9.7. Ignoring Missing Models
9.8. Pruning Failed Jobs
9.9. Storing Failed Jobs In DynamoDB
9.10. Disabling Failed Job Storage
9.11. Failed Job Events
10. Clearing Jobs From Queues
11. Monitoring Your Queues
12. Testing
12.1. Faking A Subset Of Jobs
12.2. Testing Job Chains
12.3. Testing Job Batches
12.3.1. Testing Job / Batch Interaction
13. Job Events

16. Rate Limiting

0. Rate Limiting
1. Introduction
1.1. Cache Configuration
2. Basic Usage
2.1. Manually Incrementing Attempts
2.1.1. Determining Limiter Availability
2.2. Clearing Attempts

17. Task Scheduling

0. Task Scheduling
1. Introduction
2. Defining Schedules
2.1. Scheduling Artisan Commands
2.2. Scheduling Queued Jobs
2.3. Scheduling Shell Commands
2.4. Schedule Frequency Options
2.4.1. Day Constraints
2.4.2. Between Time Constraints
2.4.3. Truth Test Constraints
2.4.4. Environment Constraints
2.5. Timezones
2.6. Preventing Task Overlaps
2.7. Running Tasks On One Server
2.7.1. Naming Single Server Jobs
2.8. Background Tasks
2.9. Maintenance Mode
3. Running The Scheduler
4. Running The Scheduler Locally
5. Task Output
6. Task Hooks
6.0.1. Pinging URLs
7. Events

6. Security

1. Authentication

0. Authentication
1. Introduction
1.1. Starter Kits
1.2. Database Considerations
1.3. Ecosystem Overview
1.3.1. Laravel's Built-in Browser Authentication Services
1.3.2. Laravel's API Authentication Services
1.3.3. Summary & Choosing Your Stack
2. Authentication Quickstart
2.4. Install A Starter Kit
2.5. Retrieving The Authenticated User
2.5.1. Determining If The Current User Is Authenticated
2.6. Protecting Routes
2.6.1. Redirecting Unauthenticated Users
2.6.2. Specifying A Guard
2.7. Login Throttling
3. Manually Authenticating Users
3.0.1. Specifying Additional Conditions
3.0.2. Accessing Specific Guard Instances
3.1. Remembering Users
3.2. Other Authentication Methods
3.2.1. Authenticate A User Instance
3.2.2. Authenticate A User By ID
3.2.3. Authenticate A User Once
4. HTTP Basic Authentication
4.2.1. A Note On FastCGI
4.3. Stateless HTTP Basic Authentication
5. Logging Out
5.1. Invalidating Sessions On Other Devices
6. Password Confirmation
6.1. Configuration
6.2. Routing
6.2.1. The Password Confirmation Form
6.2.2. Confirming The Password
6.3. Protecting Routes
7. Adding Custom Guards
7.1. Closure Request Guards
8. Adding Custom User Providers
8.1. The User Provider Contract
8.2. The Authenticatable Contract
9. Events

2. Authorization

0. Authorization
1. Introduction
2. Gates
2.1. Writing Gates
2.2. Authorizing Actions
2.2.1. Authorizing Or Throwing Exceptions
2.2.2. Supplying Additional Context
2.3. Gate Responses
2.3.1. Customizing The HTTP Response Status
2.4. Intercepting Gate Checks
2.5. Inline Authorization
3. Creating Policies
3.1. Generating Policies
3.2. Registering Policies
3.2.1. Policy Auto-Discovery
4. Writing Policies
4.3. Policy Methods
4.4. Policy Responses
4.4.1. Customizing The HTTP Response Status
4.5. Methods Without Models
4.6. Guest Users
4.7. Policy Filters
5. Authorizing Actions Using Policies
5.1. Via The User Model
5.1.1. Actions That Don't Require Models
5.2. Via Controller Helpers
5.2.1. Actions That Don't Require Models
5.2.2. Authorizing Resource Controllers
5.3. Via Middleware
5.3.1. Actions That Don't Require Models
5.4. Via Blade Templates
5.4.1. Actions That Don't Require Models
5.5. Supplying Additional Context

3. Email Verification

0. Email Verification
1. Introduction
1.1. Model Preparation
1.2. Database Preparation
2. Routing
2.1. The Email Verification Notice
2.2. The Email Verification Handler
2.3. Resending The Verification Email
2.4. Protecting Routes
3. Customization
3.0.1. Verification Email Customization
4. Events

4. Encryption

0. Encryption
1. Introduction
2. Configuration
3. Using The Encrypter
3.1.1. Encrypting A Value
3.1.2. Decrypting A Value

5. Hashing

0. Hashing
1. Introduction
2. Configuration
3. Basic Usage
3.1. Hashing Passwords
3.1.1. Adjusting The Bcrypt Work Factor
3.1.2. Adjusting The Argon2 Work Factor
3.2. Verifying That A Password Matches A Hash
3.3. Determining If A Password Needs To Be Rehashed

6. Password Reset

0. Resetting Passwords
1. Introduction
1.1. Model Preparation
1.2. Database Preparation
1.3. Configuring Trusted Hosts
2. Routing
2.1. Requesting The Password Reset Link
2.1.1. The Password Reset Link Request Form
2.1.2. Handling The Form Submission
2.2. Resetting The Password
2.2.1. The Password Reset Form
2.2.2. Handling The Form Submission
3. Deleting Expired Tokens
4. Customization
4.2.1. Reset Link Customization
4.2.2. Reset Email Customization

7. Database

1. Getting Started

0. Database: Getting Started
1. Introduction
1.1. Configuration
1.1.1. SQLite Configuration
1.1.2. Microsoft SQL Server Configuration
1.1.3. Configuration Using URLs
1.2. Read & Write Connections
1.2.1. The `sticky` Option
2. Running SQL Queries
2.2.1. Running A Select Query
2.2.2. Selecting Scalar Values
2.2.3. Using Named Bindings
2.2.4. Running An Insert Statement
2.2.5. Running An Update Statement
2.2.6. Running A Delete Statement
2.2.7. Running A General Statement
2.2.8. Running An Unprepared Statement
2.2.9. Implicit Commits
2.3. Using Multiple Database Connections
2.4. Listening For Query Events
2.5. Monitoring Cumulative Query Time
3. Database Transactions
3.0.1. Handling Deadlocks
3.0.2. Manually Using Transactions
4. Connecting To The Database CLI
5. Inspecting Your Databases
5.0.1. Table Overview
6. Monitoring Your Databases

2. Query Builder

0. Database: Query Builder
1. Introduction
2. Running Database Queries
2.1.1. Retrieving All Rows From A Table
2.1.2. Retrieving A Single Row / Column From A Table
2.1.3. Retrieving A List Of Column Values
2.2. Chunking Results
2.3. Streaming Results Lazily
2.4. Aggregates
2.4.1. Determining If Records Exist
3. Select Statements
3.4.1. Specifying A Select Clause
4. Raw Expressions
4.5. Raw Methods
4.5.1. `selectRaw`
4.5.2. `whereRaw / orWhereRaw`
4.5.3. `havingRaw / orHavingRaw`
4.5.4. `orderByRaw`
4.6. `groupByRaw`
5. Joins
5.0.1. Inner Join Clause
5.0.2. Left Join / Right Join Clause
5.0.3. Cross Join Clause
5.0.4. Advanced Join Clauses
5.0.5. Subquery Joins
6. Unions
7. Basic Where Clauses
7.1. Where Clauses
7.2. Or Where Clauses
7.3. Where Not Clauses
7.4. JSON Where Clauses
7.5. Additional Where Clauses
7.6. Logical Grouping
7.7. Advanced Where Clauses
7.8. Where Exists Clauses
7.9. Subquery Where Clauses
7.10. Full Text Where Clauses
8. Ordering, Grouping, Limit & Offset
8.1. Ordering
8.1.1. The `orderBy` Method
8.1.2. The `latest` & `oldest` Methods
8.1.3. Random Ordering
8.1.4. Removing Existing Orderings
8.2. Grouping
8.2.1. The `groupBy` & `having` Methods
8.3. Limit & Offset
8.3.1. The `skip` & `take` Methods
9. Conditional Clauses
10. Insert Statements
10.3.1. Auto-Incrementing IDs
10.4. Upserts
11. Update Statements
11.0.1. Update Or Insert
11.1. Updating JSON Columns
11.2. Increment & Decrement
12. Delete Statements
12.0.1. Table Truncation & PostgreSQL
13. Pessimistic Locking
14. Debugging

3. Pagination

0. Database: Pagination
1. Introduction
1.1.1. Tailwind JIT
2. Basic Usage
2.2. Paginating Query Builder Results
2.2.1. Simple Pagination
2.3. Paginating Eloquent Results
2.3.1. Multiple Paginator Instances Per Page
2.4. Cursor Pagination
2.4.1. Cursor vs. Offset Pagination
2.5. Manually Creating A Paginator
2.6. Customizing Pagination URLs
2.6.1. Appending Query String Values
2.6.2. Appending Hash Fragments
3. Displaying Pagination Results
3.7. Adjusting The Pagination Link Window
3.8. Converting Results To JSON
4. Customizing The Pagination View
4.1. Using Bootstrap
5. Paginator / LengthAwarePaginator Instance Methods
6. Cursor Paginator Instance Methods

4. Migrations

0. Database: Migrations
1. Introduction
2. Generating Migrations
2.1. Squashing Migrations
3. Migration Structure
3.0.1. Setting The Migration Connection
4. Running Migrations
4.0.1. Isolating Migration Execution
4.0.2. Forcing Migrations To Run In Production
4.1. Rolling Back Migrations
4.1.1. Roll Back & Migrate Using A Single Command
4.1.2. Drop All Tables & Migrate
5. Tables
5.2. Creating Tables
5.2.1. Checking For Table / Column Existence
5.2.2. Database Connection & Table Options
5.3. Updating Tables
5.4. Renaming / Dropping Tables
5.4.1. Renaming Tables With Foreign Keys
6. Columns
6.5. Creating Columns
6.6. Available Column Types
6.6.1. `bigIncrements()` {.collection-method .first-collection-method}
6.6.2. `bigInteger()` {.collection-method}
6.6.3. `binary()` {.collection-method}
6.6.4. `boolean()` {.collection-method}
6.6.5. `char()` {.collection-method}
6.6.6. `dateTimeTz()` {.collection-method}
6.6.7. `dateTime()` {.collection-method}
6.6.8. `date()` {.collection-method}
6.6.9. `decimal()` {.collection-method}
6.6.10. `double()` {.collection-method}
6.6.11. `enum()` {.collection-method}
6.6.12. `float()` {.collection-method}
6.6.13. `foreignId()` {.collection-method}
6.6.14. `foreignIdFor()` {.collection-method}
6.6.15. `foreignUlid()` {.collection-method}
6.6.16. `foreignUuid()` {.collection-method}
6.6.17. `geometryCollection()` {.collection-method}
6.6.18. `geometry()` {.collection-method}
6.6.19. `id()` {.collection-method}
6.6.20. `increments()` {.collection-method}
6.6.21. `integer()` {.collection-method}
6.6.22. `ipAddress()` {.collection-method}
6.6.23. `json()` {.collection-method}
6.6.24. `jsonb()` {.collection-method}
6.6.25. `lineString()` {.collection-method}
6.6.26. `longText()` {.collection-method}
6.6.27. `macAddress()` {.collection-method}
6.6.28. `mediumIncrements()` {.collection-method}
6.6.29. `mediumInteger()` {.collection-method}
6.6.30. `mediumText()` {.collection-method}
6.6.31. `morphs()` {.collection-method}
6.6.32. `multiLineString()` {.collection-method}
6.6.33. `multiPoint()` {.collection-method}
6.6.34. `multiPolygon()` {.collection-method}
6.6.35. `nullableTimestamps()` {.collection-method}
6.6.36. `nullableMorphs()` {.collection-method}
6.6.37. `nullableUlidMorphs()` {.collection-method}
6.6.38. `nullableUuidMorphs()` {.collection-method}
6.6.39. `point()` {.collection-method}
6.6.40. `polygon()` {.collection-method}
6.6.41. `rememberToken()` {.collection-method}
6.6.42. `set()` {.collection-method}
6.6.43. `smallIncrements()` {.collection-method}
6.6.44. `smallInteger()` {.collection-method}
6.6.45. `softDeletesTz()` {.collection-method}
6.6.46. `softDeletes()` {.collection-method}
6.6.47. `string()` {.collection-method}
6.6.48. `text()` {.collection-method}
6.6.49. `timeTz()` {.collection-method}
6.6.50. `time()` {.collection-method}
6.6.51. `timestampTz()` {.collection-method}
6.6.52. `timestamp()` {.collection-method}
6.6.53. `timestampsTz()` {.collection-method}
6.6.54. `timestamps()` {.collection-method}
6.6.55. `tinyIncrements()` {.collection-method}
6.6.56. `tinyInteger()` {.collection-method}
6.6.57. `tinyText()` {.collection-method}
6.6.58. `unsignedBigInteger()` {.collection-method}
6.6.59. `unsignedDecimal()` {.collection-method}
6.6.60. `unsignedInteger()` {.collection-method}
6.6.61. `unsignedMediumInteger()` {.collection-method}
6.6.62. `unsignedSmallInteger()` {.collection-method}
6.6.63. `unsignedTinyInteger()` {.collection-method}
6.6.64. `ulidMorphs()` {.collection-method}
6.6.65. `uuidMorphs()` {.collection-method}
6.6.66. `ulid()` {.collection-method}
6.6.67. `uuid()` {.collection-method}
6.6.68. `year()` {.collection-method}
6.7. Column Modifiers
6.7.1. Default Expressions
6.7.2. Column Order
6.8. Modifying Columns
6.8.1. Modifying Columns On SQLite
6.9. Renaming Columns
6.9.1. Renaming Columns On Legacy Databases
6.10. Dropping Columns
6.10.1. Dropping Columns On Legacy Databases
6.10.2. Available Command Aliases
7. Indexes
7.11. Creating Indexes
7.11.1. Available Index Types
7.12. Renaming Indexes
7.13. Dropping Indexes
7.14. Foreign Key Constraints
7.14.1. Dropping Foreign Keys
7.14.2. Toggling Foreign Key Constraints
8. Events

5. Seeding

0. Database: Seeding
1. Introduction
2. Writing Seeders
2.1. Using Model Factories
2.2. Calling Additional Seeders
2.3. Muting Model Events
3. Running Seeders
3.0.1. Forcing Seeders To Run In Production

6. Redis

0. Redis
1. Introduction
2. Configuration
2.1.1. Configuring The Connection Scheme
2.2. Clusters
2.3. Predis
2.3.1. The Redis Facade Alias
2.4. phpredis
2.4.1. phpredis Serialization & Compression
3. Interacting With Redis
3.4.1. Using Multiple Redis Connections
3.5. Transactions
3.5.1. Lua Scripts
3.6. Pipelining Commands
4. Pub / Sub
4.0.1. Wildcard Subscriptions

8. Eloquent ORM

1. Getting Started

0. Eloquent: Getting Started
1. Introduction
1.1.1. Laravel Bootcamp
2. Generating Model Classes
2.1.1. Inspecting Models
3. Eloquent Model Conventions
3.2. Table Names
3.3. Primary Keys
3.3.1. "Composite" Primary Keys
3.4. UUID & ULID Keys
3.5. Timestamps
3.6. Database Connections
3.7. Default Attribute Values
3.8. Configuring Eloquent Strictness
3.8.1. Enabling Eloquent "Strict Mode"
4. Retrieving Models
4.8.1. Building Queries
4.8.2. Refreshing Models
4.9. Collections
4.10. Chunking Results
4.11. Chunking Using Lazy Collections
4.12. Cursors
4.13. Advanced Subqueries
4.13.1. Subquery Selects
4.13.2. Subquery Ordering
5. Retrieving Single Models / Aggregates
5.13.1. Not Found Exceptions
5.14. Retrieving Or Creating Models
5.15. Retrieving Aggregates
6. Inserting & Updating Models
6.1. Inserts
6.2. Updates
6.2.1. Mass Updates
6.2.2. Examining Attribute Changes
6.3. Mass Assignment
6.3.1. Mass Assignment & JSON Columns
6.3.2. Allowing Mass Assignment
6.3.3. Mass Assignment Exceptions
6.4. Upserts
7. Deleting Models
7.0.1. Deleting An Existing Model By Its Primary Key
7.0.2. Deleting Models Using Queries
7.1. Soft Deleting
7.1.1. Restoring Soft Deleted Models
7.1.2. Permanently Deleting Models
7.2. Querying Soft Deleted Models
7.2.1. Including Soft Deleted Models
7.2.2. Retrieving Only Soft Deleted Models
8. Pruning Models
8.2.1. Mass Pruning
9. Replicating Models
10. Query Scopes
10.3. Global Scopes
10.3.1. Writing Global Scopes
10.3.2. Applying Global Scopes
10.3.3. Anonymous Global Scopes
10.3.4. Removing Global Scopes
10.4. Local Scopes
10.4.1. Utilizing A Local Scope
10.4.2. Dynamic Scopes
11. Comparing Models
12. Events
12.5. Using Closures
12.6. Observers
12.6.1. Defining Observers
12.6.2. Observers & Database Transactions
12.7. Muting Events
12.7.1. Saving A Single Model Without Events

2. Relationships

0. Eloquent: Relationships
1. Introduction
2. Defining Relationships
2.1. One To One
2.1.1. Defining The Inverse Of The Relationship
2.2. One To Many
2.3. One To Many (Inverse) / Belongs To
2.3.1. Default Models
2.3.2. Querying Belongs To Relationships
2.4. Has One Of Many
2.4.1. Advanced Has One Of Many Relationships
2.5. Has One Through
2.5.1. Key Conventions
2.6. Has Many Through
2.6.1. Key Conventions
3. Many To Many Relationships
3.6.1. Table Structure
3.6.2. Model Structure
3.6.3. Defining The Inverse Of The Relationship
3.7. Retrieving Intermediate Table Columns
3.7.1. Customizing The `pivot` Attribute Name
3.8. Filtering Queries Via Intermediate Table Columns
3.9. Ordering Queries Via Intermediate Table Columns
3.10. Defining Custom Intermediate Table Models
3.10.1. Custom Pivot Models And Incrementing IDs
4. Polymorphic Relationships
4.11. One To One (Polymorphic)
4.11.1. Table Structure
4.11.2. Model Structure
4.11.3. Retrieving The Relationship
4.11.4. Key Conventions
4.12. One To Many (Polymorphic)
4.12.1. Table Structure
4.12.2. Model Structure
4.12.3. Retrieving The Relationship
4.13. One Of Many (Polymorphic)
4.14. Many To Many (Polymorphic)
4.14.1. Table Structure
4.14.2. Model Structure
4.14.3. Defining The Inverse Of The Relationship
4.14.4. Retrieving The Relationship
4.15. Custom Polymorphic Types
4.16. Dynamic Relationships
5. Querying Relations
5.0.1. Chaining `orWhere` Clauses After Relationships
5.1. Relationship Methods Vs. Dynamic Properties
5.2. Querying Relationship Existence
5.2.1. Inline Relationship Existence Queries
5.3. Querying Relationship Absence
5.4. Querying Morph To Relationships
5.4.1. Querying All Related Models
6. Aggregating Related Models
6.5. Counting Related Models
6.5.1. Deferred Count Loading
6.5.2. Relationship Counting & Custom Select Statements
6.6. Other Aggregate Functions
6.7. Counting Related Models On Morph To Relationships
6.7.1. Deferred Count Loading
7. Eager Loading
7.7.1. Eager Loading Multiple Relationships
7.7.2. Nested Eager Loading
7.7.3. Nested Eager Loading `morphTo` Relationships
7.7.4. Eager Loading Specific Columns
7.7.5. Eager Loading By Default
7.8. Constraining Eager Loads
7.8.1. Constraining Eager Loading Of `morphTo` Relationships
7.8.2. Constraining Eager Loads With Relationship Existence
7.9. Lazy Eager Loading
7.9.1. Nested Lazy Eager Loading & `morphTo`
7.10. Preventing Lazy Loading
8. Inserting & Updating Related Models
8.1. The `save` Method
8.1.1. Recursively Saving Models & Relationships
8.2. The `create` Method
8.3. Belongs To Relationships
8.4. Many To Many Relationships
8.4.1. Attaching / Detaching
8.4.2. Syncing Associations
8.4.3. Toggling Associations
8.4.4. Updating A Record On The Intermediate Table
9. Touching Parent Timestamps

3. Collections

0. Eloquent: Collections
1. Introduction
1.1.1. Eloquent Collection Conversion
2. Available Methods
2.1.1. `append($attributes)` {.collection-method .first-collection-method}
2.1.2. `contains($key, $operator = null, $value = null)` {.collection-method}
2.1.3. `diff($items)` {.collection-method}
2.1.4. `except($keys)` {.collection-method}
2.1.5. `find($key)` {.collection-method}
2.1.6. `fresh($with = [])` {.collection-method}
2.1.7. `intersect($items)` {.collection-method}
2.1.8. `load($relations)` {.collection-method}
2.1.9. `loadMissing($relations)` {.collection-method}
2.1.10. `modelKeys()` {.collection-method}
2.1.11. `makeVisible($attributes)` {.collection-method}
2.1.12. `makeHidden($attributes)` {.collection-method}
2.1.13. `only($keys)` {.collection-method}
2.1.14. `setVisible($attributes)` {.collection-method}
2.1.15. `setHidden($attributes)` {.collection-method}
2.1.16. `toQuery()` {.collection-method}
2.1.17. `unique($key = null, $strict = false)` {.collection-method}
3. Custom Collections

4. Mutators / Casts

0. Eloquent: Mutators & Casting
1. Introduction
2. Accessors & Mutators
2.1. Defining An Accessor
2.1.1. Building Value Objects From Multiple Attributes
2.1.2. Accessor Caching
2.2. Defining A Mutator
2.2.1. Mutating Multiple Attributes
3. Attribute Casting
3.2.1. Stringable Casting
3.3. Array & JSON Casting
3.3.1. Array Object & Collection Casting
3.4. Date Casting
3.4.1. Date Casting, Serialization, & Timezones
3.5. Enum Casting
3.5.1. Casting Arrays Of Enums
3.6. Encrypted Casting
3.6.1. Key Rotation
3.7. Query Time Casting
4. Custom Casts
4.1. Value Object Casting
4.2. Array / JSON Serialization
4.3. Inbound Casting
4.4. Cast Parameters
4.5. Castables
4.5.1. Castables & Anonymous Cast Classes

5. API Resources

0. Eloquent: API Resources
1. Introduction
2. Generating Resources
2.1.1. Resource Collections
3. Concept Overview
3.2. Resource Collections
3.2.1. Preserving Collection Keys
3.2.2. Customizing The Underlying Resource Class
4. Writing Resources
4.2.1. Relationships
4.2.2. Resource Collections
4.3. Data Wrapping
4.3.1. Wrapping Nested Resources
4.3.2. Data Wrapping And Pagination
4.4. Pagination
4.5. Conditional Attributes
4.5.1. Merging Conditional Attributes
4.6. Conditional Relationships
4.6.1. Conditional Relationship Counts
4.6.2. Conditional Pivot Information
4.7. Adding Meta Data
4.7.1. Top Level Meta Data
4.7.2. Adding Meta Data When Constructing Resources
5. Resource Responses

6. Serialization

0. Eloquent: Serialization
1. Introduction
2. Serializing Models & Collections
2.1. Serializing To Arrays
2.2. Serializing To JSON
2.2.1. Relationships
3. Hiding Attributes From JSON
3.2.1. Temporarily Modifying Attribute Visibility
4. Appending Values To JSON
4.2.1. Appending At Run Time
5. Date Serialization
5.2.1. Customizing The Default Date Format
5.2.2. Customizing The Date Format Per Attribute

7. Factories

0. Eloquent: Factories
1. Introduction
2. Defining Model Factories
2.1. Generating Factories
2.1.1. Model & Factory Discovery Conventions
2.2. Factory States
2.2.1. "Trashed" State
2.3. Factory Callbacks
3. Creating Models Using Factories
3.1. Instantiating Models
3.1.1. Applying States
3.1.2. Overriding Attributes
3.2. Persisting Models
3.3. Sequences
4. Factory Relationships
4.1. Has Many Relationships
4.1.1. Using Magic Methods
4.2. Belongs To Relationships
4.2.1. Using Magic Methods
4.3. Many To Many Relationships
4.3.1. Pivot Table Attributes
4.3.2. Using Magic Methods
4.4. Polymorphic Relationships
4.4.1. Morph To Relationships
4.4.2. Polymorphic Many To Many Relationships
4.5. Defining Relationships Within Factories
4.6. Recycling An Existing Model For Relationships

9. Testing

1. Getting Started

0. Testing: Getting Started
1. Introduction
2. Environment
2.0.1. The `.env.testing` Environment File
2.0.2. The `CreatesApplication` Trait
3. Creating Tests
4. Running Tests
4.1. Running Tests In Parallel
4.1.1. Parallel Testing & Databases
4.1.2. Parallel Testing Hooks
4.1.3. Accessing The Parallel Testing Token
4.2. Reporting Test Coverage
4.2.1. Enforcing A Minimum Coverage Threshold
4.3. Profiling Tests

2. HTTP Tests

0. HTTP Tests
1. Introduction
2. Making Requests
2.1. Customizing Request Headers
2.2. Cookies
2.3. Session / Authentication
2.4. Debugging Responses
2.5. Exception Handling
3. Testing JSON APIs
3.0.1. Asserting Exact JSON Matches
3.0.2. Asserting On JSON Paths
3.1. Fluent JSON Testing
3.1.1. Understanding The `etc` Method
3.1.2. Asserting Attribute Presence / Absence
3.1.3. Asserting Against JSON Collections
3.1.4. Scoping JSON Collection Assertions
3.1.5. Asserting JSON Types
4. Testing File Uploads
4.1.1. Fake File Customization
5. Testing Views
5.1.1. Sharing Errors
5.2. Rendering Blade & Components
6. Available Assertions
6.1. Response Assertions
6.1.1. assertCookie
6.1.2. assertCookieExpired
6.1.3. assertCookieNotExpired
6.1.4. assertCookieMissing
6.1.5. assertCreated
6.1.6. assertDontSee
6.1.7. assertDontSeeText
6.1.8. assertDownload
6.1.9. assertExactJson
6.1.10. assertForbidden
6.1.11. assertHeader
6.1.12. assertHeaderMissing
6.1.13. assertJson
6.1.14. assertJsonCount
6.1.15. assertJsonFragment
6.1.16. assertJsonIsArray
6.1.17. assertJsonIsObject
6.1.18. assertJsonMissing
6.1.19. assertJsonMissingExact
6.1.20. assertJsonMissingValidationErrors
6.1.21. assertJsonPath
6.1.22. assertJsonMissingPath
6.1.23. assertJsonStructure
6.1.24. assertJsonValidationErrors
6.1.25. assertJsonValidationErrorFor
6.1.26. assertLocation
6.1.27. assertContent
6.1.28. assertNoContent
6.1.29. assertStreamedContent
6.1.30. assertNotFound
6.1.31. assertOk
6.1.32. assertPlainCookie
6.1.33. assertRedirect
6.1.34. assertRedirectContains
6.1.35. assertRedirectToRoute
6.1.36. assertRedirectToSignedRoute
6.1.37. assertSee
6.1.38. assertSeeInOrder
6.1.39. assertSeeText
6.1.40. assertSeeTextInOrder
6.1.41. assertSessionHas
6.1.42. assertSessionHasInput
6.1.43. assertSessionHasAll
6.1.44. assertSessionHasErrors
6.1.45. assertSessionHasErrorsIn
6.1.46. assertSessionHasNoErrors
6.1.47. assertSessionDoesntHaveErrors
6.1.48. assertSessionMissing
6.1.49. assertStatus
6.1.50. assertSuccessful
6.1.51. assertUnauthorized
6.1.52. assertUnprocessable
6.1.53. assertValid
6.1.54. assertInvalid
6.1.55. assertViewHas
6.1.56. assertViewHasAll
6.1.57. assertViewIs
6.1.58. assertViewMissing
6.2. Authentication Assertions
6.2.1. assertAuthenticated
6.2.2. assertGuest
6.2.3. assertAuthenticatedAs
7. Validation Assertions
7.2.1. assertValid
7.2.2. assertInvalid

3. Console Tests

0. Console Tests
1. Introduction
2. Success / Failure Expectations
3. Input / Output Expectations
3.1.1. Confirmation Expectations
3.1.2. Table Expectations

4. Browser Tests

0. Laravel Dusk
1. Introduction
2. Installation
2.1. Managing ChromeDriver Installations
2.2. Using Other Browsers
3. Getting Started
3.1. Generating Tests
3.2. Resetting The Database After Each Test
3.2.1. Using Database Migrations
3.2.2. Using Database Truncation
3.3. Running Tests
3.3.1. Manually Starting ChromeDriver
3.4. Environment Handling
4. Browser Basics
4.1. Creating Browsers
4.1.1. Creating Multiple Browsers
4.2. Navigation
4.3. Resizing Browser Windows
4.4. Browser Macros
4.5. Authentication
4.6. Cookies
4.7. Executing JavaScript
4.8. Taking A Screenshot
4.9. Storing Console Output To Disk
4.10. Storing Page Source To Disk
5. Interacting With Elements
5.1. Dusk Selectors
5.2. Text, Values, & Attributes
5.2.1. Retrieving & Setting Values
5.2.2. Retrieving Text
5.2.3. Retrieving Attributes
5.3. Interacting With Forms
5.3.1. Typing Values
5.3.2. Dropdowns
5.3.3. Checkboxes
5.3.4. Radio Buttons
5.4. Attaching Files
5.5. Pressing Buttons
5.6. Clicking Links
5.7. Using The Keyboard
5.8. Using The Mouse
5.8.1. Clicking On Elements
5.8.2. Mouseover
5.8.3. Drag & Drop
5.9. JavaScript Dialogs
5.10. Scoping Selectors
5.11. Waiting For Elements
5.11.1. Waiting
5.11.2. Waiting For Selectors
5.11.3. Scoping Selectors When Available
5.11.4. Waiting For Text
5.11.5. Waiting For Links
5.11.6. Waiting For Inputs
5.11.7. Waiting On The Page Location
5.11.8. Waiting For Page Reloads
5.11.9. Waiting On JavaScript Expressions
5.11.10. Waiting On Vue Expressions
5.11.11. Waiting For JavaScript Events
5.11.12. Waiting With A Callback
5.12. Scrolling An Element Into View
6. Available Assertions
6.0.1. assertTitle
6.0.2. assertTitleContains
6.0.3. assertUrlIs
6.0.4. assertSchemeIs
6.0.5. assertSchemeIsNot
6.0.6. assertHostIs
6.0.7. assertHostIsNot
6.0.8. assertPortIs
6.0.9. assertPortIsNot
6.0.10. assertPathBeginsWith
6.0.11. assertPathIs
6.0.12. assertPathIsNot
6.0.13. assertRouteIs
6.0.14. assertQueryStringHas
6.0.15. assertQueryStringMissing
6.0.16. assertFragmentIs
6.0.17. assertFragmentBeginsWith
6.0.18. assertFragmentIsNot
6.0.19. assertHasCookie
6.0.20. assertHasPlainCookie
6.0.21. assertCookieMissing
6.0.22. assertPlainCookieMissing
6.0.23. assertCookieValue
6.0.24. assertPlainCookieValue
6.0.25. assertSee
6.0.26. assertDontSee
6.0.27. assertSeeIn
6.0.28. assertDontSeeIn
6.0.29. assertSeeAnythingIn
6.0.30. assertSeeNothingIn
6.0.31. assertScript
6.0.32. assertSourceHas
6.0.33. assertSourceMissing
6.0.34. assertSeeLink
6.0.35. assertDontSeeLink
6.0.36. assertInputValue
6.0.37. assertInputValueIsNot
6.0.38. assertChecked
6.0.39. assertNotChecked
6.0.40. assertIndeterminate
6.0.41. assertRadioSelected
6.0.42. assertRadioNotSelected
6.0.43. assertSelected
6.0.44. assertNotSelected
6.0.45. assertSelectHasOptions
6.0.46. assertSelectMissingOptions
6.0.47. assertSelectHasOption
6.0.48. assertSelectMissingOption
6.0.49. assertValue
6.0.50. assertValueIsNot
6.0.51. assertAttribute
6.0.52. assertAttributeContains
6.0.53. assertAriaAttribute
6.0.54. assertDataAttribute
6.0.55. assertVisible
6.0.56. assertPresent
6.0.57. assertNotPresent
6.0.58. assertMissing
6.0.59. assertInputPresent
6.0.60. assertInputMissing
6.0.61. assertDialogOpened
6.0.62. assertEnabled
6.0.63. assertDisabled
6.0.64. assertButtonEnabled
6.0.65. assertButtonDisabled
6.0.66. assertFocused
6.0.67. assertNotFocused
6.0.68. assertAuthenticated
6.0.69. assertGuest
6.0.70. assertAuthenticatedAs
6.0.71. assertVue
6.0.72. assertVueIsNot
6.0.73. assertVueContains
6.0.74. assertVueDoesNotContain
7. Pages
7.1. Generating Pages
7.2. Configuring Pages
7.2.1. The `url` Method
7.2.2. The `assert` Method
7.3. Navigating To Pages
7.4. Shorthand Selectors
7.4.1. Global Shorthand Selectors
7.5. Page Methods
8. Components
8.1. Generating Components
8.2. Using Components
9. Continuous Integration
9.1. Heroku CI
9.2. Travis CI
9.3. GitHub Actions

5. Database

0. Database Testing
1. Introduction
1.1. Resetting The Database After Each Test
2. Model Factories
3. Running Seeders
4. Available Assertions
4.0.1. assertDatabaseCount
4.0.2. assertDatabaseHas
4.0.3. assertDatabaseMissing
4.0.4. assertSoftDeleted
4.0.5. assertNotSoftDeleted
4.0.6. assertModelExists
4.0.7. assertModelMissing
4.0.8. expectsDatabaseQueryCount

6. Mocking

0. Mocking
1. Introduction
2. Mocking Objects
3. Mocking Facades
3.1. Facade Spies
4. Interacting With Time

10. Packages

1. Breeze

0. Mocking
1. Introduction
2. Mocking Objects
3. Mocking Facades
3.1. Facade Spies
4. Interacting With Time

2. Cashier (Stripe)

0. Laravel Cashier (Stripe)
1. Introduction
2. Upgrading Cashier
3. Installation
3.1. Database Migrations
4. Configuration
4.1. Billable Model
4.2. API Keys
4.3. Currency Configuration
4.4. Tax Configuration
4.5. Logging
4.6. Using Custom Models
5. Customers
5.1. Retrieving Customers
5.2. Creating Customers
5.3. Updating Customers
5.4. Balances
5.5. Tax IDs
5.6. Syncing Customer Data With Stripe
5.7. Billing Portal
6. Payment Methods
6.1. Storing Payment Methods
6.1.1. Payment Methods For Subscriptions
6.1.2. Payment Methods For Single Charges
6.2. Retrieving Payment Methods
6.3. Determining If A User Has A Payment Method
6.4. Updating The Default Payment Method
6.5. Adding Payment Methods
6.6. Deleting Payment Methods
7. Subscriptions
7.1. Creating Subscriptions
7.1.1. Collecting Recurring Payments Via Invoice Emails
7.1.2. Quantities
7.1.3. Additional Details
7.1.4. Coupons
7.1.5. Adding Subscriptions
7.1.6. Creating Subscriptions From The Stripe Dashboard
7.2. Checking Subscription Status
7.2.1. Canceled Subscription Status
7.2.2. Incomplete and Past Due Status
7.2.3. Subscription Scopes
7.3. Changing Prices
7.3.1. Prorations
7.4. Subscription Quantity
7.4.1. Quantities For Subscriptions With Multiple Products
7.5. Subscriptions With Multiple Products
7.5.1. Swapping Prices
7.5.2. Proration
7.5.3. Quantities
7.5.4. Subscription Items
7.6. Multiple Subscriptions
7.7. Metered Billing
7.7.1. Reporting Usage
7.7.2. Retrieving Usage Records
7.8. Subscription Taxes
7.8.1. Syncing Tax Rates
7.8.2. Tax Exemption
7.9. Subscription Anchor Date
7.10. Cancelling Subscriptions
7.11. Resuming Subscriptions
8. Subscription Trials
8.1. With Payment Method Up Front
8.1.1. Defining Trial Days In Stripe / Cashier
8.2. Without Payment Method Up Front
8.3. Extending Trials
9. Handling Stripe Webhooks
9.0.1. Webhooks & CSRF Protection
9.1. Defining Webhook Event Handlers
9.2. Verifying Webhook Signatures
10. Single Charges
10.1. Simple Charge
10.2. Charge With Invoice
10.3. Creating Payment Intents
10.4. Refunding Charges
11. Invoices
11.1. Retrieving Invoices
11.1.1. Displaying Invoice Information
11.2. Upcoming Invoices
11.3. Previewing Subscription Invoices
11.4. Generating Invoice PDFs
11.4.1. Custom Invoice Renderer
12. Checkout
12.5. Product Checkouts
12.5.1. Promotion Codes
12.6. Single Charge Checkouts
12.7. Subscription Checkouts
12.7.1. Stripe Checkout & Trial Periods
12.7.2. Subscriptions & Webhooks
12.8. Collecting Tax IDs
12.9. Guest Checkouts
13. Handling Failed Payments
14. Strong Customer Authentication
14.1. Payments Requiring Additional Confirmation
14.1.1. Incomplete and Past Due State
14.2. Off-Session Payment Notifications
15. Stripe SDK
16. Testing

3. Cashier (Paddle)

0. Laravel Cashier (Paddle)
1. Introduction
2. Upgrading Cashier
3. Installation
3.1. Paddle Sandbox
3.2. Database Migrations
4. Configuration
4.1. Billable Model
4.2. API Keys
4.3. Paddle JS
4.4. Currency Configuration
4.5. Overriding Default Models
5. Core Concepts
5.1. Pay Links
5.1.1. Manually Rendering Pay Links
5.1.2. Payments Requiring Additional Confirmation
5.2. Inline Checkout
5.2.1. Inline Checkout Without Pay Links
5.2.2. Manually Rendering An Inline Checkout
5.3. User Identification
6. Prices
6.0.1. Customers
6.0.2. Coupons
7. Customers
7.1. Customer Defaults
8. Subscriptions
8.1. Creating Subscriptions
8.1.1. Additional Details
8.1.2. Coupons
8.1.3. Metadata
8.2. Checking Subscription Status
8.2.1. Cancelled Subscription Status
8.2.2. Past Due Status
8.2.3. Subscription Scopes
8.3. Subscription Single Charges
8.4. Updating Payment Information
8.5. Changing Plans
8.5.1. Prorations
8.6. Subscription Quantity
8.7. Subscription Modifiers
8.7.1. Retrieving Modifiers
8.7.2. Deleting Modifiers
8.8. Multiple Subscriptions
8.9. Pausing Subscriptions
8.10. Cancelling Subscriptions
9. Subscription Trials
9.1. With Payment Method Up Front
9.1.1. Defining Trial Days In Paddle / Cashier
9.2. Without Payment Method Up Front
10. Handling Paddle Webhooks
10.0.1. Webhooks & CSRF Protection
10.0.2. Webhooks & Local Development
10.1. Defining Webhook Event Handlers
10.2. Verifying Webhook Signatures
11. Single Charges
11.1. Simple Charge
11.2. Charging Products
11.3. Refunding Orders
12. Receipts
12.1. Past & Upcoming Payments
13. Handling Failed Payments
14. Testing

4. Dusk

0. Laravel Dusk
1. Introduction
2. Installation
2.1. Managing ChromeDriver Installations
2.2. Using Other Browsers
3. Getting Started
3.1. Generating Tests
3.2. Resetting The Database After Each Test
3.2.1. Using Database Migrations
3.2.2. Using Database Truncation
3.3. Running Tests
3.3.1. Manually Starting ChromeDriver
3.4. Environment Handling
4. Browser Basics
4.1. Creating Browsers
4.1.1. Creating Multiple Browsers
4.2. Navigation
4.3. Resizing Browser Windows
4.4. Browser Macros
4.5. Authentication
4.6. Cookies
4.7. Executing JavaScript
4.8. Taking A Screenshot
4.9. Storing Console Output To Disk
4.10. Storing Page Source To Disk
5. Interacting With Elements
5.1. Dusk Selectors
5.2. Text, Values, & Attributes
5.2.1. Retrieving & Setting Values
5.2.2. Retrieving Text
5.2.3. Retrieving Attributes
5.3. Interacting With Forms
5.3.1. Typing Values
5.3.2. Dropdowns
5.3.3. Checkboxes
5.3.4. Radio Buttons
5.4. Attaching Files
5.5. Pressing Buttons
5.6. Clicking Links
5.7. Using The Keyboard
5.8. Using The Mouse
5.8.1. Clicking On Elements
5.8.2. Mouseover
5.8.3. Drag & Drop
5.9. JavaScript Dialogs
5.10. Scoping Selectors
5.11. Waiting For Elements
5.11.1. Waiting
5.11.2. Waiting For Selectors
5.11.3. Scoping Selectors When Available
5.11.4. Waiting For Text
5.11.5. Waiting For Links
5.11.6. Waiting For Inputs
5.11.7. Waiting On The Page Location
5.11.8. Waiting For Page Reloads
5.11.9. Waiting On JavaScript Expressions
5.11.10. Waiting On Vue Expressions
5.11.11. Waiting For JavaScript Events
5.11.12. Waiting With A Callback
5.12. Scrolling An Element Into View
6. Available Assertions
6.0.1. assertTitle
6.0.2. assertTitleContains
6.0.3. assertUrlIs
6.0.4. assertSchemeIs
6.0.5. assertSchemeIsNot
6.0.6. assertHostIs
6.0.7. assertHostIsNot
6.0.8. assertPortIs
6.0.9. assertPortIsNot
6.0.10. assertPathBeginsWith
6.0.11. assertPathIs
6.0.12. assertPathIsNot
6.0.13. assertRouteIs
6.0.14. assertQueryStringHas
6.0.15. assertQueryStringMissing
6.0.16. assertFragmentIs
6.0.17. assertFragmentBeginsWith
6.0.18. assertFragmentIsNot
6.0.19. assertHasCookie
6.0.20. assertHasPlainCookie
6.0.21. assertCookieMissing
6.0.22. assertPlainCookieMissing
6.0.23. assertCookieValue
6.0.24. assertPlainCookieValue
6.0.25. assertSee
6.0.26. assertDontSee
6.0.27. assertSeeIn
6.0.28. assertDontSeeIn
6.0.29. assertSeeAnythingIn
6.0.30. assertSeeNothingIn
6.0.31. assertScript
6.0.32. assertSourceHas
6.0.33. assertSourceMissing
6.0.34. assertSeeLink
6.0.35. assertDontSeeLink
6.0.36. assertInputValue
6.0.37. assertInputValueIsNot
6.0.38. assertChecked
6.0.39. assertNotChecked
6.0.40. assertIndeterminate
6.0.41. assertRadioSelected
6.0.42. assertRadioNotSelected
6.0.43. assertSelected
6.0.44. assertNotSelected
6.0.45. assertSelectHasOptions
6.0.46. assertSelectMissingOptions
6.0.47. assertSelectHasOption
6.0.48. assertSelectMissingOption
6.0.49. assertValue
6.0.50. assertValueIsNot
6.0.51. assertAttribute
6.0.52. assertAttributeContains
6.0.53. assertAriaAttribute
6.0.54. assertDataAttribute
6.0.55. assertVisible
6.0.56. assertPresent
6.0.57. assertNotPresent
6.0.58. assertMissing
6.0.59. assertInputPresent
6.0.60. assertInputMissing
6.0.61. assertDialogOpened
6.0.62. assertEnabled
6.0.63. assertDisabled
6.0.64. assertButtonEnabled
6.0.65. assertButtonDisabled
6.0.66. assertFocused
6.0.67. assertNotFocused
6.0.68. assertAuthenticated
6.0.69. assertGuest
6.0.70. assertAuthenticatedAs
6.0.71. assertVue
6.0.72. assertVueIsNot
6.0.73. assertVueContains
6.0.74. assertVueDoesNotContain
7. Pages
7.1. Generating Pages
7.2. Configuring Pages
7.2.1. The `url` Method
7.2.2. The `assert` Method
7.3. Navigating To Pages
7.4. Shorthand Selectors
7.4.1. Global Shorthand Selectors
7.5. Page Methods
8. Components
8.1. Generating Components
8.2. Using Components
9. Continuous Integration
9.1. Heroku CI
9.2. Travis CI
9.3. GitHub Actions

5. Envoy

0. Laravel Envoy
1. Introduction
2. Installation
3. Writing Tasks
3.1. Defining Tasks
3.1.1. Local Tasks
3.1.2. Importing Envoy Tasks
3.2. Multiple Servers
3.2.1. Parallel Execution
3.3. Setup
3.4. Variables
3.5. Stories
3.6. Hooks
3.6.1. `@before`
3.6.2. `@after`
3.6.3. `@error`
3.6.4. `@success`
3.6.5. `@finished`
4. Running Tasks
4.7. Confirming Task Execution
5. Notifications
5.1. Slack
5.2. Discord
5.3. Telegram
5.4. Microsoft Teams

6. Fortify

0. Laravel Fortify
1. Introduction
1.1. What Is Fortify?
1.2. When Should I Use Fortify?
1.2.1. Laravel Fortify & Laravel Sanctum
2. Installation
2.3. The Fortify Service Provider
2.4. Fortify Features
2.5. Disabling Views
2.5.1. Disabling Views & Password Reset
3. Authentication
3.6. Customizing User Authentication
3.6.1. Authentication Guard
3.7. Customizing The Authentication Pipeline
3.8. Customizing Redirects
4. Two Factor Authentication
4.1. Enabling Two Factor Authentication
4.1.1. Confirming Two Factor Authentication
4.1.2. Displaying The Recovery Codes
4.2. Authenticating With Two Factor Authentication
4.3. Disabling Two Factor Authentication
5. Registration
5.1. Customizing Registration
6. Password Reset
6.1. Requesting A Password Reset Link
6.1.1. Handling The Password Reset Link Request Response
6.2. Resetting The Password
6.2.1. Handling The Password Reset Response
6.3. Customizing Password Resets
7. Email Verification
7.0.1. Resending Email Verification Links
7.1. Protecting Routes
8. Password Confirmation

7. Homestead

0. Laravel Homestead
1. Introduction
1.1. Included Software
1.2. Optional Software
2. Installation & Setup
2.1. First Steps
2.1.1. Installing Homestead
2.2. Configuring Homestead
2.2.1. Setting Your Provider
2.2.2. Configuring Shared Folders
2.3. Configuring Nginx Sites
2.3.1. Hostname Resolution
2.4. Configuring Services
2.5. Launching The Vagrant Box
2.6. Per Project Installation
2.7. Installing Optional Features
2.7.1. Elasticsearch
2.7.2. MariaDB
2.7.3. MongoDB
2.7.4. Neo4j
2.8. Aliases
3. Updating Homestead
4. Daily Usage
4.1. Connecting Via SSH
4.2. Adding Additional Sites
4.2.1. Site Types
4.2.2. Site Parameters
4.3. Environment Variables
4.4. Ports
4.4.1. Forwarding Additional Ports
4.5. PHP Versions
4.6. Connecting To Databases
4.7. Database Backups
4.8. Configuring Cron Schedules
4.9. Configuring MailHog
4.10. Configuring Minio
4.11. Laravel Dusk
4.12. Sharing Your Environment
5. Debugging & Profiling
5.1. Debugging Web Requests With Xdebug
5.1.1. Autostarting Xdebug
5.2. Debugging CLI Applications
5.3. Profiling Applications with Blackfire
6. Network Interfaces
7. Extending Homestead
7.1. User Customizations
8. Provider Specific Settings
8.1. VirtualBox
8.1.1. `natdnshostresolver`
8.1.2. Symbolic Links On Windows

8. Horizon

0. Laravel Horizon
1. Introduction
2. Installation
2.1. Configuration
2.1.1. Environments
2.1.2. Supervisors
2.1.3. Default Values
2.2. Balancing Strategies
2.3. Dashboard Authorization
2.3.1. Alternative Authentication Strategies
2.4. Silenced Jobs
3. Upgrading Horizon
4. Running Horizon
4.1. Deploying Horizon
4.1.1. Installing Supervisor
4.1.2. Supervisor Configuration
4.1.3. Starting Supervisor
5. Tags
5.1.1. Manually Tagging Jobs
6. Notifications
6.1.1. Configuring Notification Wait Time Thresholds
7. Metrics
8. Deleting Failed Jobs
9. Clearing Jobs From Queues

9. Jetstream

0. Laravel Horizon
1. Introduction
2. Installation
2.1. Configuration
2.1.1. Environments
2.1.2. Supervisors
2.1.3. Default Values
2.2. Balancing Strategies
2.3. Dashboard Authorization
2.3.1. Alternative Authentication Strategies
2.4. Silenced Jobs
3. Upgrading Horizon
4. Running Horizon
4.1. Deploying Horizon
4.1.1. Installing Supervisor
4.1.2. Supervisor Configuration
4.1.3. Starting Supervisor
5. Tags
5.1.1. Manually Tagging Jobs
6. Notifications
6.1.1. Configuring Notification Wait Time Thresholds
7. Metrics
8. Deleting Failed Jobs
9. Clearing Jobs From Queues

10. Mix

0. Laravel Mix
1. Introduction

11. Octane

0. Laravel Octane
1. Introduction
2. Installation
3. Server Prerequisites
3.1. RoadRunner
3.1.1. RoadRunner Via Laravel Sail
3.2. Swoole
3.2.1. Open Swoole
3.2.2. Swoole Via Laravel Sail
3.2.3. Swoole Configuration
4. Serving Your Application
4.3. Serving Your Application Via HTTPS
4.4. Serving Your Application Via Nginx
4.5. Watching For File Changes
4.6. Specifying The Worker Count
4.7. Specifying The Max Request Count
4.8. Reloading The Workers
4.9. Stopping The Server
4.9.1. Checking The Server Status
5. Dependency Injection & Octane
5.10. Container Injection
5.11. Request Injection
5.12. Configuration Repository Injection
5.13. Managing Memory Leaks
6. Concurrent Tasks
7. Ticks & Intervals
8. The Octane Cache
8.1. Cache Intervals
9. Tables

12. Passport

0. Laravel Passport
1. Introduction
1.1. Passport Or Sanctum?
2. Installation
2.0.1. Client UUIDs
2.1. Deploying Passport
2.1.1. Loading Keys From The Environment
2.2. Migration Customization
2.3. Upgrading Passport
3. Configuration
3.1. Client Secret Hashing
3.2. Token Lifetimes
3.3. Overriding Default Models
3.4. Overriding Routes
4. Issuing Access Tokens
4.1. Managing Clients
4.1.1. The `passport:client` Command
4.1.2. JSON API
4.1.3. `GET /oauth/clients`
4.1.4. `POST /oauth/clients`
4.1.5. `PUT /oauth/clients/{client-id}`
4.1.6. `DELETE /oauth/clients/{client-id}`
4.2. Requesting Tokens
4.2.1. Redirecting For Authorization
4.2.2. Approving The Request
4.2.3. Converting Authorization Codes To Access Tokens
4.2.4. JSON API
4.2.5. `GET /oauth/tokens`
4.2.6. `DELETE /oauth/tokens/{token-id}`
4.3. Refreshing Tokens
4.4. Revoking Tokens
4.5. Purging Tokens
5. Authorization Code Grant with PKCE
5.1. Creating The Client
5.2. Requesting Tokens
5.2.1. Code Verifier & Code Challenge
5.2.2. Redirecting For Authorization
5.2.3. Converting Authorization Codes To Access Tokens
6. Password Grant Tokens
6.3. Creating A Password Grant Client
6.4. Requesting Tokens
6.5. Requesting All Scopes
6.6. Customizing The User Provider
6.7. Customizing The Username Field
6.8. Customizing The Password Validation
7. Implicit Grant Tokens
8. Client Credentials Grant Tokens
8.1. Retrieving Tokens
9. Personal Access Tokens
9.1. Creating A Personal Access Client
9.2. Managing Personal Access Tokens
9.2.1. JSON API
9.2.2. `GET /oauth/scopes`
9.2.3. `GET /oauth/personal-access-tokens`
9.2.4. `POST /oauth/personal-access-tokens`
9.2.5. `DELETE /oauth/personal-access-tokens/{token-id}`
10. Protecting Routes
10.3. Via Middleware
10.3.1. Multiple Authentication Guards
10.4. Passing The Access Token
11. Token Scopes
11.1. Defining Scopes
11.2. Default Scope
11.3. Assigning Scopes To Tokens
11.3.1. When Requesting Authorization Codes
11.3.2. When Issuing Personal Access Tokens
11.4. Checking Scopes
11.4.1. Check For All Scopes
11.4.2. Check For Any Scopes
11.4.3. Checking Scopes On A Token Instance
11.4.4. Additional Scope Methods
12. Consuming Your API With JavaScript
12.4.1. Customizing The Cookie Name
12.4.2. CSRF Protection
13. Events
14. Testing

13. Pennant

0. Laravel Pennant
1. Introduction
2. Installation
3. Configuration
4. Defining Features
4.1. Class Based Features
5. Checking Features
5.0.1. Checking Class Based Features
5.1. Conditional Execution
5.2. The `HasFeatures` Trait
5.3. Blade Directive
5.4. Middleware
5.4.1. Customizing The Response
5.5. In-Memory Cache
6. Scope
6.1. Specifying The Scope
6.2. Default Scope
6.3. Nullable Scope
6.4. Identifying Scope
7. Rich Feature Values
8. Eager Loading
9. Updating Values
9.1. Bulk Updates
9.2. Purging Features
10. Testing
11. Adding Custom Pennant Drivers
11.0.1. Implementing The Driver
11.0.2. Registering The Driver
12. Events
12.1. `Laravel\Pennant\Events\RetrievingKnownFeature`
12.2. `Laravel\Pennant\Events\RetrievingUnknownFeature`
12.3. `Laravel\Pennant\Events\DynamicallyDefiningFeature`
13. Testing

14. Pint

0. Laravel Pint
1. Introduction
2. Installation
3. Running Pint
4. Configuring Pint
4.1. Presets
4.2. Rules
4.3. Excluding Files / Folders

15. Sail

0. Laravel Sail
1. Introduction
2. Installation & Setup
2.1. Installing Sail Into Existing Applications
2.1.1. Adding Additional Services
2.1.2. Using Devcontainers
2.2. Configuring A Shell Alias
3. Starting & Stopping Sail
4. Executing Commands
4.1. Executing PHP Commands
4.2. Executing Composer Commands
4.2.1. Installing Composer Dependencies For Existing Applications
4.3. Executing Artisan Commands
4.4. Executing Node / NPM Commands
5. Interacting With Databases
5.1. MySQL
5.2. Redis
5.3. MeiliSearch
6. File Storage
7. Running Tests
7.1. Laravel Dusk
7.1.1. Selenium On Apple Silicon
8. Previewing Emails
9. Container CLI
10. PHP Versions
11. Node Versions
12. Sharing Your Site
13. Debugging With Xdebug
13.1.1. Linux Host IP Configuration
13.2. Xdebug CLI Usage
13.3. Xdebug Browser Usage
14. Customization

16. Sanctum

0. Laravel Sanctum
1. Introduction
1.1. How It Works
1.1.1. API Tokens
1.1.2. SPA Authentication
2. Installation
2.1.1. Migration Customization
3. Configuration
3.2. Overriding Default Models
4. API Token Authentication
4.1. Issuing API Tokens
4.2. Token Abilities
4.2.1. Token Ability Middleware
4.2.2. First-Party UI Initiated Requests
4.3. Protecting Routes
4.4. Revoking Tokens
4.5. Token Expiration
5. SPA Authentication
5.1. Configuration
5.1.1. Configuring Your First-Party Domains
5.1.2. Sanctum Middleware
5.1.3. CORS & Cookies
5.2. Authenticating
5.2.1. CSRF Protection
5.2.2. Logging In
5.3. Protecting Routes
5.4. Authorizing Private Broadcast Channels
6. Mobile Application Authentication
6.1. Issuing API Tokens
6.2. Protecting Routes
6.3. Revoking Tokens
7. Testing

17. Scout

0. Laravel Scout
1. Introduction
2. Installation
2.1. Driver Prerequisites
2.1.1. Algolia
2.1.2. MeiliSearch
2.2. Queueing
3. Configuration
3.1. Configuring Model Indexes
3.2. Configuring Searchable Data
3.2.1. Configuring Filterable Data & Index Settings (MeiliSearch)
3.3. Configuring The Model ID
3.4. Configuring Search Engines Per Model
3.5. Identifying Users
4. Database / Collection Engines
4.1. Database Engine
4.1.1. Customizing Database Searching Strategies
4.2. Collection Engine
4.2.1. Differences From Database Engine
5. Indexing
5.3. Batch Import
5.3.1. Modifying The Import Query
5.4. Adding Records
5.4.1. Adding Records Via Query
5.5. Updating Records
5.6. Removing Records
5.7. Pausing Indexing
5.8. Conditionally Searchable Model Instances
6. Searching
6.0.1. Custom Indexes
6.1. Where Clauses
6.2. Pagination
6.3. Soft Deleting
6.4. Customizing Engine Searches
6.4.1. Customizing The Eloquent Results Query
7. Custom Engines
7.4.1. Writing The Engine
7.4.2. Registering The Engine
8. Builder Macros

18. Socialite

0. Laravel Socialite
1. Introduction
2. Installation
3. Upgrading Socialite
4. Configuration
5. Authentication
5.1. Routing
5.2. Authentication & Storage
5.3. Access Scopes
5.4. Optional Parameters
6. Retrieving User Details
6.0.1. Retrieving User Details From A Token (OAuth2)
6.0.2. Retrieving User Details From A Token And Secret (OAuth1)
6.0.3. Stateless Authentication

19. Telescope

0. Laravel Telescope
1. Introduction
2. Installation
2.1.1. Migration Customization
2.2. Local Only Installation
2.3. Configuration
2.4. Data Pruning
2.5. Dashboard Authorization
3. Upgrading Telescope
4. Filtering
4.1. Entries
4.2. Batches
5. Tagging
6. Available Watchers
6.1. Batch Watcher
6.2. Cache Watcher
6.3. Command Watcher
6.4. Dump Watcher
6.5. Event Watcher
6.6. Exception Watcher
6.7. Gate Watcher
6.8. HTTP Client Watcher
6.9. Job Watcher
6.10. Log Watcher
6.11. Mail Watcher
6.12. Model Watcher
6.13. Notification Watcher
6.14. Query Watcher
6.15. Redis Watcher
6.16. Request Watcher
6.17. Schedule Watcher
6.18. View Watcher
7. Displaying User Avatars

20. Valet

0. Laravel Valet
1. Introduction
2. Installation
2.1.1. PHP Versions
2.1.2. Database
2.1.3. Resetting Your Installation
2.2. Upgrading Valet
3. Serving Sites
3.1. The `park` Command
3.2. The `link` Command
3.3. Securing Sites With TLS
3.4. Serving A Default Site
3.5. Per-Site PHP Versions
4. Sharing Sites
4.1. Sharing Sites Via Ngrok
4.2. Sharing Sites Via Expose
4.3. Sharing Sites On Your Local Network
5. Site Specific Environment Variables
6. Proxying Services
7. Custom Valet Drivers
7.0.1. The `serves` Method
7.0.2. The `isStaticFile` Method
7.0.3. The `frontControllerPath` Method
7.1. Local Drivers
8. Other Valet Commands
9. Valet Directories & Files
9.0.1. `~/.config/valet`
9.0.2. `~/.config/valet/dnsmasq.d/`
9.0.3. `~/.config/valet/Drivers/`
9.0.4. `~/.config/valet/Extensions/`
9.0.5. `~/.config/valet/Nginx/`
9.0.6. `~/.config/valet/Sites/`
9.0.7. `~/.config/valet/config.json`
9.0.8. `~/.config/valet/valet.sock`
9.0.9. `~/.config/valet/Log/fpm-php.www.log`
9.0.10. `~/.config/valet/Log/nginx-error.log`
9.0.11. `/usr/local/var/log/php-fpm.log`
9.0.12. `/usr/local/var/log/nginx`
9.0.13. `/usr/local/etc/php/X.X/conf.d`
9.0.14. `/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf`
9.0.15. `~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf`
9.1. Disk Access

21. API Documentation

0. Laravel Valet
1. Introduction
2. Installation
2.0.1. PHP Versions
2.0.2. Database
2.0.3. Resetting Your Installation
2.1. Upgrading Valet
3. Serving Sites
3.1. The `park` Command
3.2. The `link` Command
3.3. Securing Sites With TLS
3.4. Serving A Default Site
3.5. Per-Site PHP Versions
4. Sharing Sites
4.1. Sharing Sites Via Ngrok
4.2. Sharing Sites Via Expose
4.3. Sharing Sites On Your Local Network
5. Site Specific Environment Variables
6. Proxying Services
7. Custom Valet Drivers
7.0.1. The `serves` Method
7.0.2. The `isStaticFile` Method
7.0.3. The `frontControllerPath` Method
7.1. Local Drivers
8. Other Valet Commands
9. Valet Directories & Files
9.0.1. `~/.config/valet`
9.0.2. `~/.config/valet/dnsmasq.d/`
9.0.3. `~/.config/valet/Drivers/`
9.0.4. `~/.config/valet/Extensions/`
9.0.5. `~/.config/valet/Nginx/`
9.0.6. `~/.config/valet/Sites/`
9.0.7. `~/.config/valet/config.json`
9.0.8. `~/.config/valet/valet.sock`
9.0.9. `~/.config/valet/Log/fpm-php.www.log`
9.0.10. `~/.config/valet/Log/nginx-error.log`
9.0.11. `/usr/local/var/log/php-fpm.log`
9.0.12. `/usr/local/var/log/nginx`
9.0.13. `/usr/local/etc/php/X.X/conf.d`
9.0.14. `/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf`
9.0.15. `~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf`
9.1. Disk Access