diff --git a/broadcasting.md b/broadcasting.md
index 66fad8b52e8..762e0767810 100644
--- a/broadcasting.md
+++ b/broadcasting.md
@@ -84,10 +84,10 @@ You will also need to configure and run a [queue worker](/docs/{{version}}/queue
### Reverb
-You may install Reverb using the Composer package manager. Since Reverb is currently in beta, you will need to explicitly install the beta release:
+You may install Reverb using the Composer package manager:
```sh
-composer require laravel/reverb:@beta
+composer require laravel/reverb
```
Once the package is installed, you may run Reverb's installation command to publish the configuration, update your applications's broadcasting configuration, and add Reverb's required environment variables:
@@ -346,7 +346,7 @@ When a user is viewing one of their orders, we don't want them to have to refres
/**
* The order instance.
*
- * @var \App\Order
+ * @var \App\Models\Order
*/
public $order;
}
diff --git a/collections.md b/collections.md
index bc1a9782f17..d0abb4f5897 100644
--- a/collections.md
+++ b/collections.md
@@ -2437,7 +2437,31 @@ Alternatively, you may pass your own closure to determine how to sort the collec
]
*/
-If you would like to sort your collection by multiple attributes, you may pass an array of sort operations to the `sortBy` method. Each sort operation should be an array consisting of the attribute that you wish to sort by and the direction of the desired sort:
+If you would like to sort your collection by multiple attributes, you may pass an array of the attributes that you wish to sort by:
+
+ $collection = collect([
+ ['name' => 'Taylor Otwell', 'age' => 34],
+ ['name' => 'Abigail Otwell', 'age' => 30],
+ ['name' => 'Taylor Otwell', 'age' => 36],
+ ['name' => 'Abigail Otwell', 'age' => 32],
+ ]);
+
+ $sorted = $collection->sortBy(['name', 'age']);
+
+ $sorted->values()->all();
+
+ /*
+ [
+ ['name' => 'Abigail Otwell', 'age' => 30],
+ ['name' => 'Abigail Otwell', 'age' => 32],
+ ['name' => 'Taylor Otwell', 'age' => 34],
+ ['name' => 'Taylor Otwell', 'age' => 36],
+ ]
+ */
+
+
+
+When sorting in multiple attributes and directions, you may pass an array of sort operations to the `sortBy` method. Each sort operation should be an array consisting of the attribute that you wish to sort by and the direction of the desired sort:
$collection = collect([
['name' => 'Taylor Otwell', 'age' => 34],
diff --git a/documentation.md b/documentation.md
index 18b0c1ca65a..638ca34947f 100644
--- a/documentation.md
+++ b/documentation.md
@@ -103,4 +103,4 @@
- [Socialite](/docs/{{version}}/socialite)
- [Telescope](/docs/{{version}}/telescope)
- [Valet](/docs/{{version}}/valet)
-- [API Documentation](/api/10.x)
+- [API Documentation](https://api.laravel.com/docs/10.x)
diff --git a/http-client.md b/http-client.md
index c172dc8a31c..3f09b3f69b2 100644
--- a/http-client.md
+++ b/http-client.md
@@ -548,11 +548,11 @@ If you would like to fake a sequence of responses but do not need to specify a s
#### Fake Callback
-If you require more complicated logic to determine what responses to return for certain endpoints, you may pass a closure to the `fake` method. This closure will receive an instance of `Illuminate\Http\Client\Request` and should return a response instance. Within your closure, you may perform whatever logic is necessary to determine what type of response to return:
+If you require more complicated logic to determine what responses to return for certain endpoints, you may pass a closure to the `fake` method. This closure will receive an instance of `Illuminate\Http\Client\Request` as well as an array of options. The closure should return a response instance. Within your closure, you may perform whatever logic is necessary to determine what type of response to return:
use Illuminate\Http\Client\Request;
- Http::fake(function (Request $request) {
+ Http::fake(function (Request $request, array $options) {
return Http::response('Hello World', 200);
});
diff --git a/installation.md b/installation.md
index ed1d5c45300..7c4b311b79c 100644
--- a/installation.md
+++ b/installation.md
@@ -13,6 +13,8 @@
- [Sail on Linux](#sail-on-linux)
- [Choosing Your Sail Services](#choosing-your-sail-services)
- [IDE Support](#ide-support)
+- [Laravel and AI](#laravel-and-ai)
+ - [Installing Laravel Boost](#installing-laravel-boost)
- [Next Steps](#next-steps)
- [Laravel the Full Stack Framework](#laravel-the-fullstack-framework)
- [Laravel the API Backend](#laravel-the-api-backend)
@@ -58,7 +60,7 @@ Before creating your first Laravel project, make sure that your local machine ha
After you have installed PHP and Composer, you may create a new Laravel project via Composer's `create-project` command:
```nothing
-composer create-project laravel/laravel:^10.0 example-app
+composer create-project "laravel/laravel:^10.0" example-app
```
Or, you may create new Laravel projects by globally installing [the Laravel installer](https://github.com/laravel/installer) via Composer:
@@ -265,6 +267,37 @@ You are free to use any code editor you wish when developing Laravel application
In addition, the community maintained [Laravel Idea](https://laravel-idea.com/) PhpStorm plugin offers a variety of helpful IDE augmentations, including code generation, Eloquent syntax completion, validation rule completion, and more.
+
+## Laravel and AI
+
+[Laravel Boost](https://github.com/laravel/boost) is a powerful tool that bridges the gap between AI coding agents and Laravel applications. Boost provides AI agents with Laravel-specific context, tools, and guidelines so they can generate more accurate, version-specific code that follows Laravel conventions.
+
+When you install Boost in your Laravel application, AI agents gain access to over 15 specialized tools including the ability to know which packages you are using, query your database, search the Laravel documentation, read browser logs, generate tests, and execute code via Tinker.
+
+In addition, Boost gives AI agents access to over 17,000 pieces of vectorized Laravel ecosystem documentation, specific to your installed package versions. This means agents can provide guidance targeted to the exact versions your project uses.
+
+Boost also includes Laravel-maintained AI guidelines that nudge agents to follow framework conventions, write appropriate tests, and avoid common pitfalls when generating Laravel code.
+
+
+### Installing Laravel Boost
+
+Boost can be installed in Laravel 10, 11, and 12 applications running PHP 8.1 or higher. To get started, install Boost as a development dependency:
+
+```shell
+composer require laravel/boost --dev
+```
+
+Once installed, run the interactive installer:
+
+```shell
+php artisan boost:install
+```
+
+The installer will auto-detect your IDE and AI agents, allowing you to opt into the features that make sense for your project. Boost respects existing project conventions and doesn't force opinionated style rules by default.
+
+> [!NOTE]
+> To learn more about Boost, check out the [Laravel Boost repository on GitHub](https://github.com/laravel/boost).
+
## Next Steps
diff --git a/middleware.md b/middleware.md
index 20f99bd7665..33d819af003 100644
--- a/middleware.md
+++ b/middleware.md
@@ -60,7 +60,6 @@ It's best to envision middleware as a series of "layers" HTTP requests must pass
> [!NOTE]
> All middleware are resolved via the [service container](/docs/{{version}}/container), so you may type-hint any dependencies you need within a middleware's constructor.
-
#### Middleware and Responses
@@ -238,6 +237,7 @@ Rarely, you may need your middleware to execute in a specific order but not have
protected $middlewarePriority = [
\Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
\Illuminate\Cookie\Middleware\EncryptCookies::class,
+ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
diff --git a/redis.md b/redis.md
index 4807ce752f5..ab37c15f9e0 100644
--- a/redis.md
+++ b/redis.md
@@ -13,7 +13,7 @@
## Introduction
-[Redis](https://redis.io) is an open source, advanced key-value store. It is often referred to as a data structure server since keys can contain [strings](https://redis.io/docs/data-types/strings/), [hashes](https://redis.io/docs/data-types/hashes/), [lists](https://redis.io/docs/data-types/lists/), [sets](https://redis.io/docs/data-types/sets/), and [sorted sets](https://redis.io/docs/data-types/sorted-sets/).
+[Redis](https://redis.io) is an open source, advanced key-value store. It is often referred to as a data structure server since keys can contain [strings](https://redis.io/docs/latest/develop/data-types/strings/), [hashes](https://redis.io/docs/latest/develop/data-types/hashes/), [lists](https://redis.io/docs/latest/develop/data-types/lists/), [sets](https://redis.io/docs/latest/develop/data-types/sets/), and [sorted sets](https://redis.io/docs/latest/develop/data-types/sorted-sets/).
Before using Redis with Laravel, we encourage you to install and use the [PhpRedis](https://github.com/phpredis/phpredis) PHP extension via PECL. The extension is more complex to install compared to "user-land" PHP packages but may yield better performance for applications that make heavy use of Redis. If you are using [Laravel Sail](/docs/{{version}}/sail), this extension is already installed in your application's Docker container.
diff --git a/releases.md b/releases.md
index 73d13d96209..010d1a5a608 100644
--- a/releases.md
+++ b/releases.md
@@ -29,7 +29,7 @@ For all Laravel releases, bug fixes are provided for 18 months and security fixe
| 8 | 7.3 - 8.1 | September 8th, 2020 | July 26th, 2022 | January 24th, 2023 |
| 9 | 8.0 - 8.2 | February 8th, 2022 | August 8th, 2023 | February 6th, 2024 |
| 10 | 8.1 - 8.3 | February 14th, 2023 | August 6th, 2024 | February 4th, 2025 |
-| 11 | 8.2 - 8.3 | March 12th, 2024 | August 5th, 2025 | February 3rd, 2026 |
+| 11 | 8.2 - 8.4 | March 12th, 2024 | September 3rd, 2025 | March 12th, 2026 |
diff --git a/reverb.md b/reverb.md
index 2300d9abbf1..b9ebec2b5a7 100644
--- a/reverb.md
+++ b/reverb.md
@@ -29,10 +29,10 @@
> [!WARNING]
> Laravel Reverb requires PHP 8.2+ and Laravel 10.47+.
-You may use the Composer package manager to install Reverb into your Laravel project. Since Reverb is currently in beta, you will need to explicitly install the beta release:
+You may use the Composer package manager to install Reverb into your Laravel project:
```sh
-composer require laravel/reverb:@beta
+composer require laravel/reverb
```
Once the package is installed, you may run Reverb's installation command to publish the configuration, add Reverb's required environment variables, and enable event broadcasting in your application:
@@ -82,11 +82,11 @@ For example, you may wish to maintain a single Laravel application which, via Re
```php
'apps' => [
[
- 'id' => 'my-app-one',
+ 'app_id' => 'my-app-one',
// ...
],
[
- 'id' => 'my-app-two',
+ 'app_id' => 'my-app-two',
// ...
],
],
@@ -134,6 +134,16 @@ php artisan reverb:start --host=127.0.0.1 --port=9000
Alternatively, you may define `REVERB_SERVER_HOST` and `REVERB_SERVER_PORT` environment variables in your application's `.env` configuration file.
+The `REVERB_SERVER_HOST` and `REVERB_SERVER_PORT` environment variables should not be confused with `REVERB_HOST` and `REVERB_PORT`. The former specify the host and port on which to run the Reverb server itself, while the latter pair instruct Laravel where to send broadcast messages. For example, in a production environment, you may route requests from your public Reverb hostname on port `443` to a Reverb server operating on `0.0.0.0:8080`. In this scenario, your environment variables would be defined as follows:
+
+```ini
+REVERB_SERVER_HOST=0.0.0.0
+REVERB_SERVER_PORT=8080
+
+REVERB_HOST=ws.laravel.com
+REVERB_PORT=443
+```
+
### Debugging
diff --git a/routing.md b/routing.md
index 56eafe552ce..99e857ce01c 100644
--- a/routing.md
+++ b/routing.md
@@ -469,7 +469,6 @@ Typically, implicit model binding will not retrieve models that have been [soft
return $user->email;
})->withTrashed();
-
#### Customizing the Key
diff --git a/session.md b/session.md
index 8545e13212c..f203adec8d2 100644
--- a/session.md
+++ b/session.md
@@ -199,7 +199,7 @@ The `pull` method will retrieve and delete an item from the session in a single
$value = $request->session()->pull('key', 'default');
-
+
#### Incrementing and Decrementing Session Values
If your session data contains an integer you wish to increment or decrement, you may use the `increment` and `decrement` methods:
diff --git a/strings.md b/strings.md
index be97a8c241e..263ed452039 100644
--- a/strings.md
+++ b/strings.md
@@ -363,7 +363,6 @@ The `Str::camel` method converts the given string to `camelCase`:
// 'fooBar'
-
#### `Str::charAt()` {.collection-method}
The `Str::charAt` method returns the character at the specified index. If the index is out of bounds, `false` is returned:
diff --git a/structure.md b/structure.md
index 1598f50f2d4..be3092fdf2e 100644
--- a/structure.md
+++ b/structure.md
@@ -88,6 +88,8 @@ The `storage` directory contains your logs, compiled Blade templates, file based
The `storage/app/public` directory may be used to store user-generated files, such as profile avatars, that should be publicly accessible. You should create a symbolic link at `public/storage` which points to this directory. You may create the link using the `php artisan storage:link` Artisan command.
+The location of the `storage` directory can be modified via the `LARAVEL_STORAGE_PATH` environment variable.
+
#### The Tests Directory