From 047eb0f671cc9aced99f76e670c07f343ceecc71 Mon Sep 17 00:00:00 2001
From: "S.a Mahmoudzadeh" <36761585+saMahmoudzadeh@users.noreply.github.com>
Date: Wed, 24 Apr 2024 23:20:22 +0330
Subject: [PATCH 001/325] fix grammar (#9597)
---
context.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/context.md b/context.md
index 18a6a4569ce..4f70e34ca6f 100644
--- a/context.md
+++ b/context.md
@@ -155,7 +155,7 @@ Context::when(
### Stacks
-Context offers the ability to create "stacks", which are lists of data stored in the order that they where added. You can add information to a stack by invoking the `push` method:
+Context offers the ability to create "stacks", which are lists of data stored in the order that they were added. You can add information to a stack by invoking the `push` method:
```php
use Illuminate\Support\Facades\Context;
From 303e0d608f86f80b3f9abdbd77d1e44654d2f4fa Mon Sep 17 00:00:00 2001
From: NRDev <144210397+nrdevau@users.noreply.github.com>
Date: Thu, 25 Apr 2024 07:12:54 +1000
Subject: [PATCH 002/325] [11.x] Update authorization.md - include Vue JS
approaches (#9596)
* Update authorization.md - include Vue JS approaches
Would be great to see the Inertia approach when using authorization in the frontend.
I'm not super happy about the Warning copy, but figured this would be a good way to get the discussion happening around this
* formatting
---------
Co-authored-by: Taylor Otwell
---
authorization.md | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/authorization.md b/authorization.md
index 6c1c79b202b..a817390e487 100644
--- a/authorization.md
+++ b/authorization.md
@@ -22,6 +22,7 @@
- [Via Middleware](#via-middleware)
- [Via Blade Templates](#via-blade-templates)
- [Supplying Additional Context](#supplying-additional-context)
+- [Authorization & Inertia](#authorization-and-inertia)
## Introduction
@@ -728,3 +729,45 @@ When attempting to determine if the authenticated user can update a given post,
return redirect('/posts');
}
+
+
+## Authorization & Inertia
+
+Although authorization must always be handled on the server, it can often be convenient to provide your frontend application with authorization data in order to properly render your application's UI. Laravel does not define a required convention for exposing authorization information to an Inertia powered frontend.
+
+However, if you are using one of Laravel's Inertia-based [starter kits](/docs/{{version}}/starter-kits), your application already contains a `HandleInertiaRequests` middleware. Within this middleware's `share` method, you may return shared data that will provided to all Inertia pages in your application. This shared data can serve as a convenient location to define authorization information for the user:
+
+```php
+
+ */
+ public function share(Request $request)
+ {
+ return [
+ ...parent::share($request),
+ 'auth' => [
+ 'user' => $request->user(),
+ 'permissions' => [
+ 'post' => [
+ 'create' => $request->user()->can('create', Post::class),
+ ],
+ ],
+ ],
+ ];
+ }
+}
+```
From 4fd723ac5fe53fdc58c4e64febb3683e1975d1f8 Mon Sep 17 00:00:00 2001
From: "S.a Mahmoudzadeh" <36761585+saMahmoudzadeh@users.noreply.github.com>
Date: Thu, 25 Apr 2024 17:28:28 +0330
Subject: [PATCH 003/325] fixes grammar (#9603)
---
scheduling.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scheduling.md b/scheduling.md
index ec35a5bc564..9afd97f8ca0 100644
--- a/scheduling.md
+++ b/scheduling.md
@@ -389,7 +389,7 @@ On most operating systems, cron jobs are limited to running a maximum of once pe
When sub-minute tasks are defined within your application, the `schedule:run` command will continue running until the end of the current minute instead of exiting immediately. This allows the command to invoke all required sub-minute tasks throughout the minute.
-Since sub-minute tasks that take longer than expected to run could delay the execution of later sub-minute tasks, it is recommend that all sub-minute tasks dispatch queued jobs or background commands to handle the actual task processing:
+Since sub-minute tasks that take longer than expected to run could delay the execution of later sub-minute tasks, it is recommended that all sub-minute tasks dispatch queued jobs or background commands to handle the actual task processing:
use App\Jobs\DeleteRecentUsers;
From 50d6c959ca6d215772055239a2a763538bf4ccb3 Mon Sep 17 00:00:00 2001
From: Chris Loftus <68920+chrisloftus@users.noreply.github.com>
Date: Thu, 25 Apr 2024 15:17:36 +0100
Subject: [PATCH 004/325] Response `json()` method mixed return type (#9602)
---
http-client.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/http-client.md b/http-client.md
index c49aaa57d8f..ca74f4d5fa9 100644
--- a/http-client.md
+++ b/http-client.md
@@ -35,7 +35,7 @@ To make requests, you may use the `head`, `get`, `post`, `put`, `patch`, and `de
The `get` method returns an instance of `Illuminate\Http\Client\Response`, which provides a variety of methods that may be used to inspect the response:
$response->body() : string;
- $response->json($key = null, $default = null) : array|mixed;
+ $response->json($key = null, $default = null) : mixed;
$response->object() : object;
$response->collect($key = null) : Illuminate\Support\Collection;
$response->status() : int;
From 387f6977a4ea13943cc5079fb178bdccf55ba74a Mon Sep 17 00:00:00 2001
From: Steve Bauman
Date: Thu, 25 Apr 2024 10:23:43 -0400
Subject: [PATCH 005/325] Add `URL::query()` method documentation (#9598)
* Add url()->query() method documentation
* Fix typo
* Update urls.md
---------
Co-authored-by: Taylor Otwell
---
urls.md | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/urls.md b/urls.md
index 5d454d5e75a..ab71f573d3d 100644
--- a/urls.md
+++ b/urls.md
@@ -28,6 +28,32 @@ The `url` helper may be used to generate arbitrary URLs for your application. Th
// http://example.com/posts/1
+To generate a URL with query string parameters, you may use the `query` method:
+
+ echo url()->query('/posts', ['search' => 'Laravel']);
+
+ // https://example.com/posts?search=Laravel
+
+ echo url()->query('/posts?sort=latest', ['search' => 'Laravel']);
+
+ // http://example.com/posts?sort=latest&search=Laravel
+
+Providing query string parameters that already exist in the path will overwrite their existing value:
+
+ echo url()->query('/posts?sort=latest', ['sort' => 'oldest']);
+
+ // http://example.com/posts?sort=oldest
+
+Arrays of values may also be passed as query parameters. These values will be properly keyed and encoded in the generated URL:
+
+ echo $url = url()->query('/posts', ['columns' => ['title', 'body']]);
+
+ // http://example.com/posts?columns%5B0%5D=title&columns%5B1%5D=body
+
+ echo urldecode($url);
+
+ // http://example.com/posts?columns[0]=title&columns[1]=body
+
### Accessing the Current URL
From 2c81d29aaa90791945a33c88c8e8608f173a68e1 Mon Sep 17 00:00:00 2001
From: Steve Thomas
Date: Fri, 26 Apr 2024 00:45:13 +1000
Subject: [PATCH 006/325] Add a section on authentication throttling (#9600)
* Add a section on authentication throttling
* wording
* note instead of warning
* formatting
---------
Co-authored-by: Taylor Otwell
---
fortify.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/fortify.md b/fortify.md
index 4a0b0bf547c..4e6c83dbbf4 100644
--- a/fortify.md
+++ b/fortify.md
@@ -205,6 +205,15 @@ Fortify::authenticateThrough(function (Request $request) {
});
```
+#### Authentication Throttling
+
+By default, Fortify will throttle authentication attempts using the `EnsureLoginIsNotThrottled` middleware. This middleware throttles attempts that are unique to a username and IP address combination.
+
+Some applications may require a different approach to throttling authentication attempts, such as throttling by IP address alone. Therefore, Fortify allows you to specify your own [rate limiter](/docs/{{version}}/routing#rate-limiting) via the `fortify.limiters.login` configuration option. Of course, this configuration option is located in your application's `config/fortify.php` configuration file.
+
+> [!NOTE]
+> Utilizing a mixture of throttling, [two factor authentication](/docs/{{version}}/fortify#two-factor-authentication), and an external web application firewall (WAF) will provide the most robust defense for your legitimate application users.
+
### Customizing Redirects
From 3f53d0aa4dbcc18f51c547f366a4acf8b1baac4b Mon Sep 17 00:00:00 2001
From: Aron Rotteveel
Date: Thu, 25 Apr 2024 17:22:15 +0200
Subject: [PATCH 007/325] [11.x] Write documentation for notification
middleware (#9594)
* Write documentation for notification middleware
* Make code block stylign align with rest of docs
* More little markdown tweaks
* Minor wording tweaks
* formatting
* Formatting
---------
Co-authored-by: Taylor Otwell
---
notifications.md | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/notifications.md b/notifications.md
index 84dddd24c15..e6676d8d99b 100644
--- a/notifications.md
+++ b/notifications.md
@@ -169,9 +169,6 @@ If you would like to delay the delivery of the notification, you may chain the `
$user->notify((new InvoicePaid($invoice))->delay($delay));
-
-#### Delaying Notifications per Channel
-
You may pass an array to the `delay` method to specify the delay amount for specific channels:
$user->notify((new InvoicePaid($invoice))->delay([
@@ -253,6 +250,27 @@ If you would like to specify a specific queue that should be used for each notif
];
}
+
+#### Queued Notification Middleware
+
+Queued notifications may define middleware [just like queued jobs](/docs/{{version}}/queues#job-middleware). To get started, define a `middleware` method on your notification class. The `middleware` method will receive `$notifiable` and `$channel` variables, which allow you to customize the returned middleware based on the notification's destination:
+
+ use Illuminate\Queue\Middleware\RateLimited;
+
+ /**
+ * Get the middleware the notification job should pass through.
+ *
+ * @return array
+ */
+ public function middleware(object $notifiable, string $channel)
+ {
+ return match ($channel) {
+ 'email' => [new RateLimited('postmark')],
+ 'slack' => [new RateLimited('slack')],
+ default => [],
+ };
+ }
+
#### Queued Notifications and Database Transactions
From d67ea35774a93da23f751c0b3059c747d3da7d0a Mon Sep 17 00:00:00 2001
From: Janos Horvath
Date: Thu, 25 Apr 2024 20:35:45 +0200
Subject: [PATCH 008/325] Update instructions to install the beta release of
the package without downgrading application's minimum-stability setting
(#9604)
---
pulse.md | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/pulse.md b/pulse.md
index 79f787a71a5..680a6435c0b 100644
--- a/pulse.md
+++ b/pulse.md
@@ -35,17 +35,10 @@ For in-depth debugging of individual events, check out [Laravel Telescope](/docs
> [!WARNING]
> Pulse's first-party storage implementation currently requires a MySQL, MariaDB, or PostgreSQL database. If you are using a different database engine, you will need a separate MySQL, MariaDB, or PostgreSQL database for your Pulse data.
-Since Pulse is currently in beta, you may need to adjust your application's `composer.json` file to allow beta package releases to be installed:
-
-```json
-"minimum-stability": "beta",
-"prefer-stable": true
-```
-
-Then, you may use the Composer package manager to install Pulse into your Laravel project:
+Since Pulse is currently in beta, you will need to explicitly install the beta release:
```sh
-composer require laravel/pulse
+composer require laravel/pulse:@beta
```
Next, you should publish the Pulse configuration and migration files using the `vendor:publish` Artisan command:
From ed143722f3e0584b26d8b6bebbd2e3d3424994a3 Mon Sep 17 00:00:00 2001
From: Milwad <98118400+milwad-dev@users.noreply.github.com>
Date: Mon, 29 Apr 2024 16:55:10 +0330
Subject: [PATCH 009/325] [11.x] Add note for `make:provider` command (#9607)
* Update providers.md
* Update providers.md
* Update providers.md
---------
Co-authored-by: Taylor Otwell
---
providers.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/providers.md b/providers.md
index e17d9c15635..4d6c2709e1d 100644
--- a/providers.md
+++ b/providers.md
@@ -26,7 +26,7 @@ All user-defined service providers are registered in the `bootstrap/providers.ph
All service providers extend the `Illuminate\Support\ServiceProvider` class. Most service providers contain a `register` and a `boot` method. Within the `register` method, you should **only bind things into the [service container](/docs/{{version}}/container)**. You should never attempt to register any event listeners, routes, or any other piece of functionality within the `register` method.
-The Artisan CLI can generate a new provider via the `make:provider` command:
+The Artisan CLI can generate a new provider via the `make:provider` command. Laravel will automatically register your new provider in your application's `bootstrap/providers.php` file:
```shell
php artisan make:provider RiakServiceProvider
From 71c87a53e238d1d96dbcf970e07082da93bcb8cc Mon Sep 17 00:00:00 2001
From: Taylor Otwell
Date: Mon, 29 Apr 2024 08:26:57 -0500
Subject: [PATCH 010/325] wip
---
facades.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/facades.md b/facades.md
index e8ecca5e55c..1d849e0658b 100644
--- a/facades.md
+++ b/facades.md
@@ -326,6 +326,7 @@ Request | [Illuminate\Http\Request](https://laravel.com/api/{{version}}/Illumi
Response | [Illuminate\Contracts\Routing\ResponseFactory](https://laravel.com/api/{{version}}/Illuminate/Contracts/Routing/ResponseFactory.html) |
Response (Instance) | [Illuminate\Http\Response](https://laravel.com/api/{{version}}/Illuminate/Http/Response.html) |
Route | [Illuminate\Routing\Router](https://laravel.com/api/{{version}}/Illuminate/Routing/Router.html) | `router`
+Schedule | [Illuminate\Console\Scheduling\Schedule](https://laravel.com/api/{{version}}/Illuminate/Console/Scheduling/Schedule.html) |
Schema | [Illuminate\Database\Schema\Builder](https://laravel.com/api/{{version}}/Illuminate/Database/Schema/Builder.html) |
Session | [Illuminate\Session\SessionManager](https://laravel.com/api/{{version}}/Illuminate/Session/SessionManager.html) | `session`
Session (Instance) | [Illuminate\Session\Store](https://laravel.com/api/{{version}}/Illuminate/Session/Store.html) | `session.store`
From 2c88575e6855e4a61e8f98ce8a0a7b693fd5800d Mon Sep 17 00:00:00 2001
From: Hafez Divandari
Date: Mon, 29 Apr 2024 18:05:19 +0330
Subject: [PATCH 011/325] remove incomplete section (#9611)
---
http-tests.md | 5 -----
1 file changed, 5 deletions(-)
diff --git a/http-tests.md b/http-tests.md
index b645e30b1e8..13e2e095c06 100644
--- a/http-tests.md
+++ b/http-tests.md
@@ -878,11 +878,6 @@ You may use the `component` method to evaluate and render a [Blade component](/d
$view->assertSee('Taylor');
-
-## Testing Exceptions
-
-If you are testing a
-
## Available Assertions
From ec089da122a82f89f8035aea5c918522b139b783 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Dunglas?=
Date: Mon, 29 Apr 2024 22:46:33 +0200
Subject: [PATCH 012/325] [11.x] Update FrankenPHP docs (#9613)
* [11.x] Update FrankenPHP docs
* Update deployment.md
* Update octane.md
---------
Co-authored-by: Taylor Otwell
---
deployment.md | 12 ++++++++++++
octane.md | 2 +-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/deployment.md b/deployment.md
index 6bbc2c07f18..e6af9290a33 100644
--- a/deployment.md
+++ b/deployment.md
@@ -4,6 +4,7 @@
- [Server Requirements](#server-requirements)
- [Server Configuration](#server-configuration)
- [Nginx](#nginx)
+ - [FrankenPHP](#frankenphp)
- [Optimization](#optimization)
- [Caching Configuration](#optimizing-configuration-loading)
- [Caching Events](#caching-events)
@@ -87,6 +88,17 @@ server {
}
```
+
+### FrankenPHP
+
+[FrankenPHP](https://frankenphp.dev/) may also be used to serve your Laravel applications. FrankenPHP is a modern PHP application server written in Go. To serve a Laravel PHP application using FrankenPHP, you may simply invoke its `php-server` command:
+
+```shell
+frankenphp php-server -r public/
+```
+
+To take advantage of more powerful features supported by FrankenPHP, such as its [Laravel Octane](/docs/{{version}}/octane) integration, HTTP/3, modern compression, or the ability to package Laravel applications as standalone binaries, please consult FrankenPHP's [Laravel documentation](https://frankenphp.dev/docs/laravel/).
+
## Optimization
diff --git a/octane.md b/octane.md
index be0154e289e..2aee14ceb1d 100644
--- a/octane.md
+++ b/octane.md
@@ -56,7 +56,7 @@ php artisan octane:install
> [!WARNING]
> FrankenPHP's Octane integration is in beta and should be used with caution in production.
-[FrankenPHP](https://frankenphp.dev) is a PHP application server, written in Go, that supports modern web features like early hints and Zstandard compression. When you install Octane and choose FrankenPHP as your server, Octane will automatically download and install the FrankenPHP binary for you.
+[FrankenPHP](https://frankenphp.dev) is a PHP application server, written in Go, that supports modern web features like early hints, Brotli, and Zstandard compression. When you install Octane and choose FrankenPHP as your server, Octane will automatically download and install the FrankenPHP binary for you.
#### FrankenPHP via Laravel Sail
From bf44ac6afe222bb2af94a13dda285718fd215ab6 Mon Sep 17 00:00:00 2001
From: Nico <3315078+nicolus@users.noreply.github.com>
Date: Tue, 30 Apr 2024 14:36:07 +0200
Subject: [PATCH 013/325] Add note about standard "Forwarded" header in Trusted
proxies (#9615)
* Add note about standard "Forwarded" header in Trusted proxies
This configuration is required for applications behind a proxy that uses the standard Forward: "" header described in RFC 7239, like HAproxy with the "option forwarded" directive.
* Update requests.md
---------
Co-authored-by: Taylor Otwell
---
requests.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requests.md b/requests.md
index e2dbc005f27..9f3f1f9482c 100644
--- a/requests.md
+++ b/requests.md
@@ -620,7 +620,7 @@ In addition to configuring the trusted proxies, you may also configure the proxy
})
> [!NOTE]
-> If you are using AWS Elastic Load Balancing, your `headers` value should be `Request::HEADER_X_FORWARDED_AWS_ELB`. For more information on the constants that may be used in the `headers` value, check out Symfony's documentation on [trusting proxies](https://symfony.com/doc/7.0/deployment/proxies.html).
+> If you are using AWS Elastic Load Balancing, the `headers` value should be `Request::HEADER_X_FORWARDED_AWS_ELB`. If your load balancer uses the standard `Forwarded` header from [RFC 7239](https://www.rfc-editor.org/rfc/rfc7239#section-4), the `headers` value should be `Request::HEADER_FORWARDED`. For more information on the constants that may be used in the `headers` value, check out Symfony's documentation on [trusting proxies](https://symfony.com/doc/7.0/deployment/proxies.html).
#### Trusting All Proxies
From 32acc19e0f6476497faf63b864e4551e324760f8 Mon Sep 17 00:00:00 2001
From: "S.a Mahmoudzadeh" <36761585+saMahmoudzadeh@users.noreply.github.com>
Date: Tue, 30 Apr 2024 16:06:39 +0330
Subject: [PATCH 014/325] fixes cashier-paddle.md (#9614)
---
cashier-paddle.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/cashier-paddle.md b/cashier-paddle.md
index e3e8201ce88..345dfaf1475 100644
--- a/cashier-paddle.md
+++ b/cashier-paddle.md
@@ -160,7 +160,7 @@ Paddle relies on its own JavaScript library to initiate the Paddle checkout widg
### Currency Configuration
-You can specify a locale to be used when formatting money values for display on invoices. Internally, Cashier utilizes [PHP's `NumberFormatter` class](https://www.php.net/manual/en/class.numberformatter.php) class to set the currency locale:
+You can specify a locale to be used when formatting money values for display on invoices. Internally, Cashier utilizes [PHP's `NumberFormatter` class](https://www.php.net/manual/en/class.numberformatter.php) to set the currency locale:
```ini
CASHIER_CURRENCY_LOCALE=nl_BE
@@ -703,7 +703,7 @@ To create a subscription, first retrieve an instance of your billable model from
The first argument given to the `subscribe` method is the specific price the user is subscribing to. This value should correspond to the price's identifier in Paddle. The `returnTo` method accepts a URL that your user will be redirected to after they successfully complete the checkout. The second argument passed to the `subscribe` method should be the internal "type" of the subscription. If your application only offers a single subscription, you might call this `default` or `primary`. This subscription type is only for internal application usage and is not meant to be displayed to users. In addition, it should not contain spaces and it should never be changed after creating the subscription.
-You may also provide an array of custom meta data regarding the subscription using the `customData` method:
+You may also provide an array of custom metadata regarding the subscription using the `customData` method:
$checkout = $request->user()->subscribe($premium = 12345, 'default')
->customData(['key' => 'value'])
@@ -722,7 +722,7 @@ After the user has finished their checkout, a `subscription_created` webhook wil
### Checking Subscription Status
-Once a user is subscribed to your application, you may check their subscription status using a variety of convenient methods. First, the `subscribed` method returns `true` if the user has an valid subscription, even if the subscription is currently within its trial period:
+Once a user is subscribed to your application, you may check their subscription status using a variety of convenient methods. First, the `subscribed` method returns `true` if the user has a valid subscription, even if the subscription is currently within its trial period:
if ($user->subscribed()) {
// ...
From f0acbe976cf851fae97a8f1af44451ac0bdf9537 Mon Sep 17 00:00:00 2001
From: Haider Ali <47752310+haider00125@users.noreply.github.com>
Date: Tue, 30 Apr 2024 17:37:14 +0500
Subject: [PATCH 015/325] Fixing method name and example code under Price
Preview section (#9616)
* Fixing method name.
* Fixing example code.
---
cashier-paddle.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cashier-paddle.md b/cashier-paddle.md
index 345dfaf1475..dbf236467ce 100644
--- a/cashier-paddle.md
+++ b/cashier-paddle.md
@@ -579,7 +579,7 @@ The currency will be determined based on the IP address of the request; however,
use Laravel\Paddle\Cashier;
- $prices = Cashier::productPrices(['pri_123', 'pri_456'], ['address' => [
+ $prices = Cashier::previewPrices(['pri_123', 'pri_456'], ['address' => [
'country_code' => 'BE',
'postal_code' => '1234',
]]);
@@ -599,7 +599,7 @@ You may also display the subtotal price and tax amount separately:
```blade
```
From 660a5099feeafcd66c38555b274851e630074178 Mon Sep 17 00:00:00 2001
From: Frans Slabbekoorn
Date: Tue, 30 Apr 2024 16:42:45 +0200
Subject: [PATCH 016/325] fix: consistent parameter typing across request
methods (#9617)
* fix: consistent parameter typing across request methods
* Update requests.md
---------
Co-authored-by: Taylor Otwell
---
requests.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requests.md b/requests.md
index 9f3f1f9482c..9bc0797de15 100644
--- a/requests.md
+++ b/requests.md
@@ -431,7 +431,7 @@ To determine if a given key is absent from the request, you may use the `missing
// ...
}
- $request->whenMissing('name', function (array $input) {
+ $request->whenMissing('name', function () {
// The "name" value is missing...
}, function () {
// The "name" value is present...
From ea461f727a1b206a43a79e6b2185fd49ad3fef6b Mon Sep 17 00:00:00 2001
From: Davey Shafik
Date: Tue, 30 Apr 2024 07:44:52 -0700
Subject: [PATCH 017/325] [1.x] Adds `--repair` option documentation (#9606)
* Add `with-exit-status` flag docs for Pint
* Update pint.md
---------
Co-authored-by: Taylor Otwell
---
pint.md | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/pint.md b/pint.md
index 50d6719a97a..2156e920e85 100644
--- a/pint.md
+++ b/pint.md
@@ -47,7 +47,7 @@ Pint will display a thorough list of all of the files that it updates. You can v
./vendor/bin/pint -v
```
-If you would like Pint to simply inspect your code for style errors without actually changing the files, you may use the `--test` option:
+If you would like Pint to simply inspect your code for style errors without actually changing the files, you may use the `--test` option. Pint will return a non-zero exit code if any code style errors are found:
```shell
./vendor/bin/pint --test
@@ -59,6 +59,12 @@ If you would like Pint to only modify the files that have uncommitted changes ac
./vendor/bin/pint --dirty
```
+If you would like Pint to fix any files with code style errors but also exit with a non-zero exit code if any errors were fixed, you may use the `--repair` option:
+
+```shell
+./vendor/bin/pint --repair
+```
+
## Configuring Pint
From 6b5618c420d04e88421e60fb6e42802d260e0a9c Mon Sep 17 00:00:00 2001
From: Julius Kiekbusch
Date: Tue, 30 Apr 2024 19:16:33 +0200
Subject: [PATCH 018/325] [11.x] Pulse v1 (#9618)
* Pulse v1
* Update pulse.md
---------
Co-authored-by: Taylor Otwell
---
pulse.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pulse.md b/pulse.md
index 680a6435c0b..f4b7e990ee8 100644
--- a/pulse.md
+++ b/pulse.md
@@ -35,10 +35,10 @@ For in-depth debugging of individual events, check out [Laravel Telescope](/docs
> [!WARNING]
> Pulse's first-party storage implementation currently requires a MySQL, MariaDB, or PostgreSQL database. If you are using a different database engine, you will need a separate MySQL, MariaDB, or PostgreSQL database for your Pulse data.
-Since Pulse is currently in beta, you will need to explicitly install the beta release:
+You may install Pulse using the Composer package manager:
```sh
-composer require laravel/pulse:@beta
+composer require laravel/pulse
```
Next, you should publish the Pulse configuration and migration files using the `vendor:publish` Artisan command:
From 654fcea669deeb0653085567856aa07dd6875340 Mon Sep 17 00:00:00 2001
From: Nuno Maduro
Date: Tue, 30 Apr 2024 20:51:20 +0100
Subject: [PATCH 019/325] Puts frankenphp out of beta (#9620)
---
octane.md | 3 ---
1 file changed, 3 deletions(-)
diff --git a/octane.md b/octane.md
index 2aee14ceb1d..1c4b32deec5 100644
--- a/octane.md
+++ b/octane.md
@@ -53,9 +53,6 @@ php artisan octane:install
### FrankenPHP
-> [!WARNING]
-> FrankenPHP's Octane integration is in beta and should be used with caution in production.
-
[FrankenPHP](https://frankenphp.dev) is a PHP application server, written in Go, that supports modern web features like early hints, Brotli, and Zstandard compression. When you install Octane and choose FrankenPHP as your server, Octane will automatically download and install the FrankenPHP binary for you.
From e8ca8ae7d0c4932510de8905684fcfb7197f1a4b Mon Sep 17 00:00:00 2001
From: Tim MacDonald
Date: Thu, 2 May 2024 01:31:34 +1000
Subject: [PATCH 020/325] [11.x] Document disable highlighting (#9623)
* Document disable highlighting
* Update pulse.md
---------
Co-authored-by: Taylor Otwell
---
pulse.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/pulse.md b/pulse.md
index f4b7e990ee8..3d33ef69c63 100644
--- a/pulse.md
+++ b/pulse.md
@@ -214,6 +214,12 @@ The `` card shows the database queries in your ap
By default, slow queries are grouped based on the SQL query (without bindings) and the location where it occurred, but you may choose to not capture the location if you wish to group solely on the SQL query.
+If you encounter rendering performance issues due to extremely large SQL queries receiving syntax highlighting, you may disable highlighting by adding the `disable-highlighting` prop:
+
+```blade
+
+```
+
See the [slow queries recorder](#slow-queries-recorder) documentation for more information.
From f1eccbe0a9714c79f5c9943ef444d4968189ff28 Mon Sep 17 00:00:00 2001
From: Milwad <98118400+milwad-dev@users.noreply.github.com>
Date: Wed, 1 May 2024 19:02:13 +0330
Subject: [PATCH 021/325] Update facades.md (#9621)
---
facades.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/facades.md b/facades.md
index 1d849e0658b..9b72a8cf783 100644
--- a/facades.md
+++ b/facades.md
@@ -303,6 +303,8 @@ Date | [Illuminate\Support\DateFactory](https://laravel.com/api/{{version}}/Il
DB | [Illuminate\Database\DatabaseManager](https://laravel.com/api/{{version}}/Illuminate/Database/DatabaseManager.html) | `db`
DB (Instance) | [Illuminate\Database\Connection](https://laravel.com/api/{{version}}/Illuminate/Database/Connection.html) | `db.connection`
Event | [Illuminate\Events\Dispatcher](https://laravel.com/api/{{version}}/Illuminate/Events/Dispatcher.html) | `events`
+Exceptions | [Illuminate\Foundation\Exceptions\Handler](https://laravel.com/api/{{version}}/Illuminate/Foundation/Exceptions/Handler.html) |
+Exceptions (Instance) | [Illuminate\Contracts\Debug\ExceptionHandler](https://laravel.com/api/{{version}}/Illuminate/Contracts/Debug/ExceptionHandler.html) |
File | [Illuminate\Filesystem\Filesystem](https://laravel.com/api/{{version}}/Illuminate/Filesystem/Filesystem.html) | `files`
Gate | [Illuminate\Contracts\Auth\Access\Gate](https://laravel.com/api/{{version}}/Illuminate/Contracts/Auth/Access/Gate.html) |
Hash | [Illuminate\Contracts\Hashing\Hasher](https://laravel.com/api/{{version}}/Illuminate/Contracts/Hashing/Hasher.html) | `hash`
From 3f3c6b6fda3ec3e6e223ff60b96b8f453982b6b9 Mon Sep 17 00:00:00 2001
From: Ellie Rider
Date: Fri, 3 May 2024 13:20:58 -0400
Subject: [PATCH 022/325] Helpers - Fix context example (#9630)
Looks like it was a typo, the example used `config` instead of `context`
---
helpers.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helpers.md b/helpers.md
index 23cd72599c4..5906469c047 100644
--- a/helpers.md
+++ b/helpers.md
@@ -1714,7 +1714,7 @@ The `context` function gets the value from the [current context](/docs/{{version
$value = context('trace_id');
- $value = config('trace_id', $default);
+ $value = context('trace_id', $default);
You may set context values by passing an array of key / value pairs:
From 28d91301f943da492a88c686fa81bfe6082fcfb0 Mon Sep 17 00:00:00 2001
From: Raphael Cunha
Date: Fri, 3 May 2024 13:23:46 -0400
Subject: [PATCH 023/325] Remove extra "to" word in Multi-select section
(#9628)
---
prompts.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/prompts.md b/prompts.md
index 726cd69686d..d61dbb0c668 100644
--- a/prompts.md
+++ b/prompts.md
@@ -372,7 +372,7 @@ If the `options` argument is an associative array, then the closure will receive
### Multi-select
-If you need to the user to be able to select multiple options, you may use the `multiselect` function:
+If you need the user to be able to select multiple options, you may use the `multiselect` function:
```php
use function Laravel\Prompts\multiselect;
From c371a706b9cfecde2e4e7e99f1db792f1df41868 Mon Sep 17 00:00:00 2001
From: Nikolay Nikolaev
Date: Fri, 3 May 2024 20:24:29 +0300
Subject: [PATCH 024/325] Fix typos in sail.md (#9626)
* Fix typos in sail.md
* Update sail.md
---
sail.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/sail.md b/sail.md
index a2a87744b2b..3811046a3d6 100644
--- a/sail.md
+++ b/sail.md
@@ -249,14 +249,14 @@ To connect to your application's Redis database from your local machine, you may
### Meilisearch
-If you chose to install the [Meilisearch](https://www.meilisearch.com) service when installing Sail, your application's `docker-compose.yml` file will contain an entry for this powerful search-engine that is [compatible](https://github.com/meilisearch/meilisearch-laravel-scout) with [Laravel Scout](/docs/{{version}}/scout). Once you have started your containers, you may connect to the Meilisearch instance within your application by setting your `MEILISEARCH_HOST` environment variable to `http://meilisearch:7700`.
+If you chose to install the [Meilisearch](https://www.meilisearch.com) service when installing Sail, your application's `docker-compose.yml` file will contain an entry for this powerful search engine that is integrated with [Laravel Scout](/docs/{{version}}/scout). Once you have started your containers, you may connect to the Meilisearch instance within your application by setting your `MEILISEARCH_HOST` environment variable to `http://meilisearch:7700`.
From your local machine, you may access Meilisearch's web based administration panel by navigating to `http://localhost:7700` in your web browser.
### Typesense
-If you chose to install the [Typesense](https://typesense.org) service when installing Sail, your application's `docker-compose.yml` file will contain an entry for this lightning fast, open-source search-engine that is natively integrated with [Laravel Scout](/docs/{{version}}/scout#typesense). Once you have started your containers, you may connect to the Typesense instance within your application by setting the following environment variables:
+If you chose to install the [Typesense](https://typesense.org) service when installing Sail, your application's `docker-compose.yml` file will contain an entry for this lightning fast, open-source search engine that is natively integrated with [Laravel Scout](/docs/{{version}}/scout#typesense). Once you have started your containers, you may connect to the Typesense instance within your application by setting the following environment variables:
```ini
TYPESENSE_HOST=typesense
@@ -381,7 +381,7 @@ When Sail is running, you may access the Mailpit web interface at: http://localh
## Container CLI
-Sometimes you may wish to start a Bash session within your application's container. You may use the `shell` command to connect to your application's container, allowing you to inspect its files and installed services as well execute arbitrary shell commands within the container:
+Sometimes you may wish to start a Bash session within your application's container. You may use the `shell` command to connect to your application's container, allowing you to inspect its files and installed services as well as execute arbitrary shell commands within the container:
```shell
sail shell
@@ -517,7 +517,7 @@ sail debug migrate
To debug your application while interacting with the application via a web browser, follow the [instructions provided by Xdebug](https://xdebug.org/docs/step_debug#web-application) for initiating an Xdebug session from the web browser.
-If you're using PhpStorm, please review JetBrain's documentation regarding [zero-configuration debugging](https://www.jetbrains.com/help/phpstorm/zero-configuration-debugging.html).
+If you're using PhpStorm, please review JetBrains' documentation regarding [zero-configuration debugging](https://www.jetbrains.com/help/phpstorm/zero-configuration-debugging.html).
> [!WARNING]
> Laravel Sail relies on `artisan serve` to serve your application. The `artisan serve` command only accepts the `XDEBUG_CONFIG` and `XDEBUG_MODE` variables as of Laravel version 8.53.0. Older versions of Laravel (8.52.0 and below) do not support these variables and will not accept debug connections.
From 8ae1833164edd0ca78825724d23ef1f6550b961a Mon Sep 17 00:00:00 2001
From: Nikolay Nikolaev
Date: Fri, 3 May 2024 20:24:42 +0300
Subject: [PATCH 025/325] Fix typo in octane.md (#9625)
---
octane.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/octane.md b/octane.md
index 1c4b32deec5..4cdae9776f4 100644
--- a/octane.md
+++ b/octane.md
@@ -104,7 +104,7 @@ Typically, you should access your FrankenPHP Sail application via `https://local
#### FrankenPHP via Docker
-Using FrankenPHP's official Docker images can offer improved performance and the use additional extensions not included with static installations of FrankenPHP. In addition, the official Docker images provide support for running FrankenPHP on platforms it doesn't natively support, such as Windows. FrankenPHP's official Docker images are suitable for both local development and production usage.
+Using FrankenPHP's official Docker images can offer improved performance and the use of additional extensions not included with static installations of FrankenPHP. In addition, the official Docker images provide support for running FrankenPHP on platforms it doesn't natively support, such as Windows. FrankenPHP's official Docker images are suitable for both local development and production usage.
You may use the following Dockerfile as a starting point for containerizing your FrankenPHP powered Laravel application:
From eee7d1f93f20cc9e79265dd1e3a3277ad2392573 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Viktor=20Sz=C3=A9pe?=
Date: Sun, 5 May 2024 17:35:04 +0200
Subject: [PATCH 026/325] Fix typo in horizon (#9633)
---
horizon.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/horizon.md b/horizon.md
index 0d55a87780c..a8d86dd7332 100644
--- a/horizon.md
+++ b/horizon.md
@@ -89,7 +89,7 @@ You may add additional supervisors to a given environment if you would like to d
#### Maintenance Mode
-While your application is in [maintainance mode](/docs/{{version}}/configuration#maintenance-mode), queued jobs will not be processed by Horizon unless the supervisor's `force` option is defined as `true` within the Horizon configuration file:
+While your application is in [maintenance mode](/docs/{{version}}/configuration#maintenance-mode), queued jobs will not be processed by Horizon unless the supervisor's `force` option is defined as `true` within the Horizon configuration file:
'environments' => [
'production' => [
From 8d7fffe5ca35892bf72eaffd7af46718d1e1585a Mon Sep 17 00:00:00 2001
From: Md Eamin Hossain
Date: Sun, 5 May 2024 21:35:30 +0600
Subject: [PATCH 027/325] Update variable type hint in
OrderShipmentStatusUpdated event (#9632)
---
broadcasting.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/broadcasting.md b/broadcasting.md
index 0f3611264c1..385b1b01516 100644
--- a/broadcasting.md
+++ b/broadcasting.md
@@ -361,7 +361,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;
}
From de690fc41dba45345a4ae0a03cffd54d40dd43e6 Mon Sep 17 00:00:00 2001
From: Ryuta Hamasaki
Date: Mon, 6 May 2024 00:45:34 +0900
Subject: [PATCH 028/325] remove the repetitive "return" (#9631)
---
pulse.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pulse.md b/pulse.md
index 3d33ef69c63..cee4f18a671 100644
--- a/pulse.md
+++ b/pulse.md
@@ -665,7 +665,7 @@ class TopSellers extends Card
}
```
-The `aggregate` method returns return a collection of PHP `stdClass` objects. Each object will contain the `key` property captured earlier, along with keys for each of the requested aggregates:
+The `aggregate` method returns a collection of PHP `stdClass` objects. Each object will contain the `key` property captured earlier, along with keys for each of the requested aggregates:
```
@foreach ($topSellers as $seller)
From 78e4cab11471130f2e66a405a1ed82d84f1ce7a7 Mon Sep 17 00:00:00 2001
From: Taylor Otwell
Date: Mon, 6 May 2024 13:11:26 -0400
Subject: [PATCH 029/325] wip
---
pulse.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pulse.md b/pulse.md
index cee4f18a671..546d30e264e 100644
--- a/pulse.md
+++ b/pulse.md
@@ -214,10 +214,10 @@ The `` card shows the database queries in your ap
By default, slow queries are grouped based on the SQL query (without bindings) and the location where it occurred, but you may choose to not capture the location if you wish to group solely on the SQL query.
-If you encounter rendering performance issues due to extremely large SQL queries receiving syntax highlighting, you may disable highlighting by adding the `disable-highlighting` prop:
+If you encounter rendering performance issues due to extremely large SQL queries receiving syntax highlighting, you may disable highlighting by adding the `without-highlighting` prop:
```blade
-
+
```
See the [slow queries recorder](#slow-queries-recorder) documentation for more information.
From 851b548090eec94055f1f82595b3f8ca429b280b Mon Sep 17 00:00:00 2001
From: Taylor Otwell
Date: Mon, 6 May 2024 15:03:04 -0400
Subject: [PATCH 030/325] resend driver
---
mail.md | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/mail.md b/mail.md
index b29c720bfd4..c43884c9f68 100644
--- a/mail.md
+++ b/mail.md
@@ -36,7 +36,7 @@
## Introduction
-Sending email doesn't have to be complicated. Laravel provides a clean, simple email API powered by the popular [Symfony Mailer](https://symfony.com/doc/7.0/mailer.html) component. Laravel and Symfony Mailer provide drivers for sending email via SMTP, Mailgun, Postmark, Amazon SES, and `sendmail`, allowing you to quickly get started sending mail through a local or cloud based service of your choice.
+Sending email doesn't have to be complicated. Laravel provides a clean, simple email API powered by the popular [Symfony Mailer](https://symfony.com/doc/7.0/mailer.html) component. Laravel and Symfony Mailer provide drivers for sending email via SMTP, Mailgun, Postmark, Resend, Amazon SES, and `sendmail`, allowing you to quickly get started sending mail through a local or cloud based service of your choice.
### Configuration
@@ -48,7 +48,7 @@ Within your `mail` configuration file, you will find a `mailers` configuration a
### Driver / Transport Prerequisites
-The API based drivers such as Mailgun, Postmark, and MailerSend are often simpler and faster than sending mail via SMTP servers. Whenever possible, we recommend that you use one of these drivers.
+The API based drivers such as Mailgun, Postmark, Resend, and MailerSend are often simpler and faster than sending mail via SMTP servers. Whenever possible, we recommend that you use one of these drivers.
#### Mailgun Driver
@@ -113,6 +113,21 @@ If you would like to specify the Postmark message stream that should be used by
This way you are also able to set up multiple Postmark mailers with different message streams.
+
+#### Resend Driver
+
+To use the Resend driver, install Resend's PHP SDK via Composer:
+
+```shell
+composer require resend/resend-php
+```
+
+Next, set the `default` option in your application's `config/mail.php` configuration file to `resend`. After configuring your application's default mailer, ensure that your `config/services.php` configuration file contains the following options:
+
+ 'resend' => [
+ 'key' => env('RESEND_KEY'),
+ ],
+
#### SES Driver
From 2a1a27a4d5f9614ab92770833db16c09bd4b8eca Mon Sep 17 00:00:00 2001
From: Taylor Otwell
Date: Mon, 6 May 2024 15:03:41 -0400
Subject: [PATCH 031/325] wip
---
mail.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mail.md b/mail.md
index c43884c9f68..bd7e3c36997 100644
--- a/mail.md
+++ b/mail.md
@@ -89,7 +89,7 @@ If you are not using the United States [Mailgun region](https://documentation.ma
#### Postmark Driver
-To use the Postmark driver, install Symfony's Postmark Mailer transport via Composer:
+To use the [Postmark](https://postmarkapp.com/) driver, install Symfony's Postmark Mailer transport via Composer:
```shell
composer require symfony/postmark-mailer symfony/http-client
@@ -116,7 +116,7 @@ This way you are also able to set up multiple Postmark mailers with different me
#### Resend Driver
-To use the Resend driver, install Resend's PHP SDK via Composer:
+To use the [Resend](https://resend.com/) driver, install Resend's PHP SDK via Composer:
```shell
composer require resend/resend-php
From fb0794e067f28b0704ba9c366f543d23135db70b Mon Sep 17 00:00:00 2001
From: Haider Ali <47752310+haider00125@users.noreply.github.com>
Date: Tue, 7 May 2024 05:18:03 +0500
Subject: [PATCH 032/325] Fix event handler example code. (#9638)
---
cashier-paddle.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cashier-paddle.md b/cashier-paddle.md
index dbf236467ce..aea70492b43 100644
--- a/cashier-paddle.md
+++ b/cashier-paddle.md
@@ -1235,7 +1235,7 @@ Both events contain the full payload of the Paddle webhook. For example, if you
*/
public function handle(WebhookReceived $event): void
{
- if ($event->payload['alert_name'] === 'transaction_billed') {
+ if ($event->payload['event_type'] === 'transaction.billed') {
// Handle the incoming event...
}
}
From 52c2336e200427998407c2b7c123584374155c2a Mon Sep 17 00:00:00 2001
From: Dries Vints
Date: Tue, 7 May 2024 08:59:46 +0200
Subject: [PATCH 033/325] Update cashier-paddle.md
---
cashier-paddle.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cashier-paddle.md b/cashier-paddle.md
index aea70492b43..c84f3445a27 100644
--- a/cashier-paddle.md
+++ b/cashier-paddle.md
@@ -1220,7 +1220,7 @@ Cashier automatically handles subscription cancelation on failed charges and oth
- `Laravel\Paddle\Events\WebhookReceived`
- `Laravel\Paddle\Events\WebhookHandled`
-Both events contain the full payload of the Paddle webhook. For example, if you wish to handle the `transaction_billed` webhook, you may register a [listener](/docs/{{version}}/events#defining-listeners) that will handle the event:
+Both events contain the full payload of the Paddle webhook. For example, if you wish to handle the `transaction.billed` webhook, you may register a [listener](/docs/{{version}}/events#defining-listeners) that will handle the event:
Date: Thu, 9 May 2024 04:21:46 +1000
Subject: [PATCH 034/325] Rename component prop (#9635)
From 86518f934aa146fac6947d63ba5f5efbd6f8837d Mon Sep 17 00:00:00 2001
From: Tim MacDonald
Date: Thu, 9 May 2024 04:26:58 +1000
Subject: [PATCH 035/325] [11.x] Pulse: Ignore offline servers (#9622)
* Document ignore-after prop
* Improve example
* Update pulse.md
---------
Co-authored-by: Taylor Otwell
---
pulse.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/pulse.md b/pulse.md
index 546d30e264e..55ecf0e1a77 100644
--- a/pulse.md
+++ b/pulse.md
@@ -169,6 +169,12 @@ public function boot(): void
The `` card displays system resource usage for all servers running the `pulse:check` command. Please refer to the documentation regarding the [servers recorder](#servers-recorder) for more information on system resource reporting.
+If you replace a server in your infrastructure, you may wish to stop displaying the inactive server in the Pulse dashboard after a given duration. You may accomplish this using the `ignore-after` prop, which accepts the number of seconds after which inactive servers should be removed from the Pulse dashboard. Alternatively, you may provide a relative time formatted string, such as `1 hour` or `3 days and 1 hour`:
+
+```blade
+
+```
+
#### Application Usage
From 43a416d09aa91530e8d6f24532acd7509c67ce82 Mon Sep 17 00:00:00 2001
From: Tim MacDonald
Date: Thu, 9 May 2024 04:27:13 +1000
Subject: [PATCH 036/325] Namespace folio make command (#9510)
---
folio.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/folio.md b/folio.md
index 13406521094..9efb7edc619 100644
--- a/folio.md
+++ b/folio.md
@@ -109,7 +109,7 @@ php artisan folio:list
You may create a nested route by creating one or more directories within one of Folio's directories. For instance, to create a page that is accessible via `/user/profile`, create a `profile.blade.php` template within the `pages/user` directory:
```bash
-php artisan make:folio user/profile
+php artisan folio:page user/profile
# pages/user/profile.blade.php → /user/profile
```
@@ -120,10 +120,10 @@ php artisan make:folio user/profile
Sometimes, you may wish to make a given page the "index" of a directory. By placing an `index.blade.php` template within a Folio directory, any requests to the root of that directory will be routed to that page:
```bash
-php artisan make:folio index
+php artisan folio:page index
# pages/index.blade.php → /
-php artisan make:folio users/index
+php artisan folio:page users/index
# pages/users/index.blade.php → /users
```
@@ -133,7 +133,7 @@ php artisan make:folio users/index
Often, you will need to have segments of the incoming request's URL injected into your page so that you can interact with them. For example, you may need to access the "ID" of the user whose profile is being displayed. To accomplish this, you may encapsulate a segment of the page's filename in square brackets:
```bash
-php artisan make:folio "users/[id]"
+php artisan folio:page "users/[id]"
# pages/users/[id].blade.php → /users/1
```
@@ -149,7 +149,7 @@ Captured segments can be accessed as variables within your Blade template:
To capture multiple segments, you can prefix the encapsulated segment with three dots `...`:
```bash
-php artisan make:folio "users/[...ids]"
+php artisan folio:page "users/[...ids]"
# pages/users/[...ids].blade.php → /users/1/2/3
```
@@ -170,7 +170,7 @@ When capturing multiple segments, the captured segments will be injected into th
If a wildcard segment of your page template's filename corresponds one of your application's Eloquent models, Folio will automatically take advantage of Laravel's route model binding capabilities and attempt to inject the resolved model instance into your page:
```bash
-php artisan make:folio "users/[User]"
+php artisan folio:page "users/[User]"
# pages/users/[User].blade.php → /users/1
```
@@ -194,7 +194,7 @@ On Windows, you should use `-` to separate the model name from the key: `[Post-s
By default, Folio will search for your model within your application's `app/Models` directory. However, if needed, you may specify the fully-qualified model class name in your template's filename:
```bash
-php artisan make:folio "users/[.App.Models.User]"
+php artisan folio:page "users/[.App.Models.User]"
# pages/users/[.App.Models.User].blade.php → /users/1
```
From 6d89df95cecd6c23227a306bd32ca21ac92ff767 Mon Sep 17 00:00:00 2001
From: Maarten Paauw
Date: Thu, 9 May 2024 19:17:34 +0200
Subject: [PATCH 037/325] Update socialite.md (#9643)
Add Slack OpenID provider to Socialite documentation
---
socialite.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/socialite.md b/socialite.md
index ae937cf24eb..54a27175346 100644
--- a/socialite.md
+++ b/socialite.md
@@ -39,7 +39,7 @@ When upgrading to a new major version of Socialite, it's important that you care
Before using Socialite, you will need to add credentials for the OAuth providers your application utilizes. Typically, these credentials may be retrieved by creating a "developer application" within the dashboard of the service you will be authenticating with.
-These credentials should be placed in your application's `config/services.php` configuration file, and should use the key `facebook`, `twitter` (OAuth 1.0), `twitter-oauth-2` (OAuth 2.0), `linkedin-openid`, `google`, `github`, `gitlab`, `bitbucket`, or `slack`, depending on the providers your application requires:
+These credentials should be placed in your application's `config/services.php` configuration file, and should use the key `facebook`, `twitter` (OAuth 1.0), `twitter-oauth-2` (OAuth 2.0), `linkedin-openid`, `google`, `github`, `gitlab`, `bitbucket`, `slack`, or `slack-openid`, depending on the providers your application requires:
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
From 62db09bab113a7b2236e96e0f47ab2f44aede3b7 Mon Sep 17 00:00:00 2001
From: Haider Ali <47752310+haider00125@users.noreply.github.com>
Date: Sat, 11 May 2024 00:23:10 +0500
Subject: [PATCH 038/325] Fixing typo in extend trial example code (#9646)
---
cashier-paddle.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cashier-paddle.md b/cashier-paddle.md
index c84f3445a27..48acd5dbb92 100644
--- a/cashier-paddle.md
+++ b/cashier-paddle.md
@@ -1170,7 +1170,7 @@ You may use the `onGenericTrial` method if you wish to know specifically that th
You can extend an existing trial period on a subscription by invoking the `extendTrial` method and specifying the moment in time that the trial should end:
- $user->subsription()->extendTrial(now()->addDays(5));
+ $user->subscription()->extendTrial(now()->addDays(5));
Or, you may immediately activate a subscription by ending its trial by calling the `activate` method on the subscription:
From f1e6124543f53c2a425356f0ec469f092e51740d Mon Sep 17 00:00:00 2001
From: Ehsan Mahmoodi
Date: Fri, 10 May 2024 22:54:10 +0330
Subject: [PATCH 039/325] Update horizon.md (#9645)
---
horizon.md | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
diff --git a/horizon.md b/horizon.md
index a8d86dd7332..8e90e2bed3b 100644
--- a/horizon.md
+++ b/horizon.md
@@ -185,23 +185,7 @@ Alternatively, the job you wish to silence can implement the `Laravel\Horizon\Co
## Upgrading Horizon
-When upgrading to a new major version of Horizon, it's important that you carefully review [the upgrade guide](https://github.com/laravel/horizon/blob/master/UPGRADE.md). In addition, when upgrading to any new Horizon version, you should re-publish Horizon's assets:
-
-```shell
-php artisan horizon:publish
-```
-
-To keep the assets up-to-date and avoid issues in future updates, you may add the `vendor:publish --tag=laravel-assets` command to the `post-update-cmd` scripts in your application's `composer.json` file:
-
-```json
-{
- "scripts": {
- "post-update-cmd": [
- "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
- ]
- }
-}
-```
+When upgrading to a new major version of Horizon, it's important that you carefully review [the upgrade guide](https://github.com/laravel/horizon/blob/master/UPGRADE.md).
## Running Horizon
From 54adbdad2c77a91bb259879125a8d833c5f36088 Mon Sep 17 00:00:00 2001
From: Andrew Brown
Date: Fri, 10 May 2024 14:36:38 -0500
Subject: [PATCH 040/325] [11.x] add documentation for new "contains"
validation rule (#9644)
* add documentation for new "contains" validation rule
https://github.com/laravel/framework/pull/51348
* Update validation.md
---------
Co-authored-by: Taylor Otwell
---
validation.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/validation.md b/validation.md
index 2154256744b..1f24309e2ea 100644
--- a/validation.md
+++ b/validation.md
@@ -879,6 +879,7 @@ Below is a list of all available validation rules and their function:
[Between](#rule-between)
[Boolean](#rule-boolean)
[Confirmed](#rule-confirmed)
+[Contains](#rule-contains)
[Current Password](#rule-current-password)
[Date](#rule-date)
[Date Equals](#rule-date-equals)
@@ -1097,6 +1098,11 @@ The field under validation must be able to be cast as a boolean. Accepted input
The field under validation must have a matching field of `{field}_confirmation`. For example, if the field under validation is `password`, a matching `password_confirmation` field must be present in the input.
+
+#### contains:_foo_,_bar_,...
+
+The field under validation must be an array that contains all of the given parameter values.
+
#### current_password
From 61b0dcfaefb563e820976bda299554c65441af30 Mon Sep 17 00:00:00 2001
From: Andrew Brown
Date: Fri, 10 May 2024 15:06:40 -0500
Subject: [PATCH 041/325] minor grammar (#9648)
- add missing word in `authorization.md`.
- consistently use "an SPA" vs "a SPA". there were of mix of uses in the docs, and "an" is more appropriate as "SPA" starts with a vowel sound.
---
authorization.md | 2 +-
csrf.md | 2 +-
sanctum.md | 6 +++---
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/authorization.md b/authorization.md
index a817390e487..f894ce11a72 100644
--- a/authorization.md
+++ b/authorization.md
@@ -735,7 +735,7 @@ When attempting to determine if the authenticated user can update a given post,
Although authorization must always be handled on the server, it can often be convenient to provide your frontend application with authorization data in order to properly render your application's UI. Laravel does not define a required convention for exposing authorization information to an Inertia powered frontend.
-However, if you are using one of Laravel's Inertia-based [starter kits](/docs/{{version}}/starter-kits), your application already contains a `HandleInertiaRequests` middleware. Within this middleware's `share` method, you may return shared data that will provided to all Inertia pages in your application. This shared data can serve as a convenient location to define authorization information for the user:
+However, if you are using one of Laravel's Inertia-based [starter kits](/docs/{{version}}/starter-kits), your application already contains a `HandleInertiaRequests` middleware. Within this middleware's `share` method, you may return shared data that will be provided to all Inertia pages in your application. This shared data can serve as a convenient location to define authorization information for the user:
```php
### CSRF Tokens & SPAs
-If you are building a SPA that is utilizing Laravel as an API backend, you should consult the [Laravel Sanctum documentation](/docs/{{version}}/sanctum) for information on authenticating with your API and protecting against CSRF vulnerabilities.
+If you are building an SPA that is utilizing Laravel as an API backend, you should consult the [Laravel Sanctum documentation](/docs/{{version}}/sanctum) for information on authenticating with your API and protecting against CSRF vulnerabilities.
### Excluding URIs From CSRF Protection
diff --git a/sanctum.md b/sanctum.md
index b3080fad3d6..8830c7d5b9f 100644
--- a/sanctum.md
+++ b/sanctum.md
@@ -42,7 +42,7 @@ Laravel Sanctum offers this feature by storing user API tokens in a single datab
#### SPA Authentication
-Second, Sanctum exists to offer a simple way to authenticate single page applications (SPAs) that need to communicate with a Laravel powered API. These SPAs might exist in the same repository as your Laravel application or might be an entirely separate repository, such as a SPA created using Vue CLI or a Next.js application.
+Second, Sanctum exists to offer a simple way to authenticate single page applications (SPAs) that need to communicate with a Laravel powered API. These SPAs might exist in the same repository as your Laravel application or might be an entirely separate repository, such as an SPA created using Vue CLI or a Next.js application.
For this feature, Sanctum does not use tokens of any kind. Instead, Sanctum uses Laravel's built-in cookie based session authentication services. Typically, Sanctum utilizes Laravel's `web` authentication guard to accomplish this. This provides the benefits of CSRF protection, session authentication, as well as protects against leakage of the authentication credentials via XSS.
@@ -60,7 +60,7 @@ You may install Laravel Sanctum via the `install:api` Artisan command:
php artisan install:api
```
-Next, if you plan to utilize Sanctum to authenticate a SPA, please refer to the [SPA Authentication](#spa-authentication) section of this documentation.
+Next, if you plan to utilize Sanctum to authenticate an SPA, please refer to the [SPA Authentication](#spa-authentication) section of this documentation.
## Configuration
@@ -267,7 +267,7 @@ Next, you should instruct Laravel that incoming requests from your SPA can authe
#### CORS and Cookies
-If you are having trouble authenticating with your application from a SPA that executes on a separate subdomain, you have likely misconfigured your CORS (Cross-Origin Resource Sharing) or session cookie settings.
+If you are having trouble authenticating with your application from an SPA that executes on a separate subdomain, you have likely misconfigured your CORS (Cross-Origin Resource Sharing) or session cookie settings.
The `config/cors.php` configuration file is not published by default. If you need to customize Laravel's CORS options, you should publish the complete `cors` configuration file using the `config:publish` Artisan command:
From 9ff2aaeef0449657bbcfbf2da09fcb0509b85078 Mon Sep 17 00:00:00 2001
From: Tim MacDonald
Date: Tue, 14 May 2024 03:05:59 +1000
Subject: [PATCH 042/325] Pulse thresolds (#9652)
* Document per-x thresholds
* Fix class reference
* wip
---------
Co-authored-by: Taylor Otwell
---
pulse.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 57 insertions(+), 1 deletion(-)
diff --git a/pulse.md b/pulse.md
index 55ecf0e1a77..30c57ecdf8e 100644
--- a/pulse.md
+++ b/pulse.md
@@ -309,6 +309,20 @@ The `SlowJobs` recorder captures information about slow jobs occurring in your a
You may optionally adjust the slow job threshold, [sample rate](#sampling), and ignored job patterns.
+You may have some jobs that you expect to take longer than others. In those cases, you may configure per-job thresholds:
+
+```php
+Recorders\SlowJobs::class => [
+ // ...
+ 'threshold' => [
+ '#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
+ 'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
+ ],
+],
+```
+
+If no regular expression patterns match the job's classname, then the `'default'` value will be used.
+
#### Slow Outgoing Requests
@@ -316,10 +330,24 @@ The `SlowOutgoingRequests` recorder captures information about outgoing HTTP req
You may optionally adjust the slow outgoing request threshold, [sample rate](#sampling), and ignored URL patterns.
+You may have some outgoing requests that you expect to take longer than others. In those cases, you may configure per-request thresholds:
+
+```php
+Recorders\SlowOutgoingRequests::class => [
+ // ...
+ 'threshold' => [
+ '#backup.zip$#' => 5000,
+ 'default' => env('PULSE_SLOW_OUTGOING_REQUESTS_THRESHOLD', 1000),
+ ],
+],
+```
+
+If no regular expression patterns match the request's URL, then the `'default'` value will be used.
+
You may also configure URL grouping so that similar URLs are grouped as a single entry. For example, you may wish to remove unique IDs from URL paths or group by domain only. Groups are configured using a regular expression to "find and replace" parts of the URL. Some examples are included in the configuration file:
```php
-Recorders\OutgoingRequests::class => [
+Recorders\SlowOutgoingRequests::class => [
// ...
'groups' => [
// '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*',
@@ -338,6 +366,20 @@ The `SlowQueries` recorder captures any database queries in your application tha
You may optionally adjust the slow query threshold, [sample rate](#sampling), and ignored query patterns. You may also configure whether to capture the query location. The captured location will be displayed on the Pulse dashboard which can help to track down the query origin; however, if the same query is made in multiple locations then it will appear multiple times for each unique location.
+You may have some queries that you expect to take longer than others. In those cases, you may configure per-query thresholds:
+
+```php
+Recorders\SlowQueries::class => [
+ // ...
+ 'threshold' => [
+ '#^insert into `yearly_reports`#' => 5000,
+ 'default' => env('PULSE_SLOW_QUERIES_THRESHOLD', 1000),
+ ],
+],
+```
+
+If no regular expression patterns match the query's SQL, then the `'default'` value will be used.
+
#### Slow Requests
@@ -345,6 +387,20 @@ The `Requests` recorder captures information about requests made to your applica
You may optionally adjust the slow route threshold, [sample rate](#sampling), and ignored paths.
+You may have some requests that you expect to take longer than others. In those cases, you may configure per-request thresholds:
+
+```php
+Recorders\SlowRequests::class => [
+ // ...
+ 'threshold' => [
+ '#^/admin/#' => 5000,
+ 'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
+ ],
+],
+```
+
+If no regular expression patterns match the request's URL, then the `'default'` value will be used.
+
#### Servers
From b8bf6ca8a64bd05c27e4ef2b6eddbd961d02bf2b Mon Sep 17 00:00:00 2001
From: "Alex P. Gates"
Date: Mon, 13 May 2024 12:08:43 -0500
Subject: [PATCH 043/325] Add details about Carbon 3 upgrade (#9653)
Adds a bit more context about changes to Carbon 3's `diffIn*`changes.
---
upgrade.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/upgrade.md b/upgrade.md
index 064f853be10..eb3ffb22f4a 100644
--- a/upgrade.md
+++ b/upgrade.md
@@ -414,7 +414,7 @@ public function scalar($query, $bindings = [], $useReadPdo = true);
**Likelihood Of Impact: Medium**
-Laravel 11 supports both Carbon 2 and Carbon 3. Carbon is a date manipulation library utilized extensively by Laravel and packages throughout the ecosystem. If you install Carbon 3, you should review Carbon's [change log](https://github.com/briannesbitt/Carbon/releases/tag/3.0.0).
+Laravel 11 supports both Carbon 2 and Carbon 3. Carbon is a date manipulation library utilized extensively by Laravel and packages throughout the ecosystem. If you upgrade to Carbon 3, be aware that `diffIn*` methods now return floating-point numbers and may return negative values to indicate time direction, which is a significant change from Carbon 2. Review Carbon's [change log](https://github.com/briannesbitt/Carbon/releases/tag/3.0.0) for detailed information on how to handle these and other changes.
### Mail
From 98800e08b321f2e591cefb104c9ece3645b41ab9 Mon Sep 17 00:00:00 2001
From: Milwad <98118400+milwad-dev@users.noreply.github.com>
Date: Mon, 13 May 2024 20:45:33 +0330
Subject: [PATCH 044/325] [11.x] Add `whereIn` example with enum class (#9649)
* Update routing.md
* Update routing.md
---------
Co-authored-by: Taylor Otwell
---
routing.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/routing.md b/routing.md
index eb8cd83a4b3..091ff88ee05 100644
--- a/routing.md
+++ b/routing.md
@@ -323,6 +323,10 @@ For convenience, some commonly used regular expression patterns have helper meth
Route::get('/category/{category}', function (string $category) {
// ...
})->whereIn('category', ['movie', 'song', 'painting']);
+
+ Route::get('/category/{category}', function (string $category) {
+ // ...
+ })->whereIn('category', CategoryEnum::cases());
If the incoming request does not match the route pattern constraints, a 404 HTTP response will be returned.
From 2a9cd61538f0b9d340d11f178129b090a183bcbd Mon Sep 17 00:00:00 2001
From: Ahmed shamim
Date: Mon, 13 May 2024 23:15:58 +0600
Subject: [PATCH 045/325] Hide X-powered-by in nginx config (#9651)
---
deployment.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/deployment.md b/deployment.md
index e6af9290a33..421ccaf8c5b 100644
--- a/deployment.md
+++ b/deployment.md
@@ -80,6 +80,7 @@ server {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
+ fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
From 0dd21627d08a2bc060714f86c308f1c6e284b0de Mon Sep 17 00:00:00 2001
From: janne-stuvia <161812605+janne-stuvia@users.noreply.github.com>
Date: Mon, 13 May 2024 19:50:40 +0200
Subject: [PATCH 046/325] Adding ',' in the example (#9657)
---
precognition.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/precognition.md b/precognition.md
index 3877cd0993e..4dc62c6de60 100644
--- a/precognition.md
+++ b/precognition.md
@@ -630,7 +630,7 @@ protected function rules()
'avatar' => [
...$this->isPrecognitive() ? [] : ['required'],
'image',
- 'mimes:jpg,png'
+ 'mimes:jpg,png',
'dimensions:ratio=3/2',
],
// ...
From bdf7135378f88ea5d47e8a8306462c65232b7a34 Mon Sep 17 00:00:00 2001
From: Milwad <98118400+milwad-dev@users.noreply.github.com>
Date: Mon, 13 May 2024 21:20:50 +0330
Subject: [PATCH 047/325] Update routing.md (#9656)
---
routing.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/routing.md b/routing.md
index 091ff88ee05..94a27da6983 100644
--- a/routing.md
+++ b/routing.md
@@ -317,7 +317,7 @@ For convenience, some commonly used regular expression patterns have helper meth
})->whereUuid('id');
Route::get('/user/{id}', function (string $id) {
- //
+ // ...
})->whereUlid('id');
Route::get('/category/{category}', function (string $category) {
From 147284468a475e2b294d9679e4d970d3a8104782 Mon Sep 17 00:00:00 2001
From: Edgaras <55696268+Edgaraszs@users.noreply.github.com>
Date: Sat, 18 May 2024 00:37:35 +0300
Subject: [PATCH 048/325] [11.x] Adds documentation on GitHub Actions with
Laravel Pint (#9661)
* docs: laravel pint usage with github actions
* Fixes Pint documentation with GitHub Actions
* Update pint.md
---------
Co-authored-by: Nuno Maduro
Co-authored-by: Taylor Otwell
---
pint.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/pint.md b/pint.md
index 2156e920e85..dcf69c9c294 100644
--- a/pint.md
+++ b/pint.md
@@ -7,6 +7,8 @@
- [Presets](#presets)
- [Rules](#rules)
- [Excluding Files / Folders](#excluding-files-or-folders)
+- [Continuous Integration](#continuous-integration)
+ - [GitHub Actions](#running-tests-on-github-actions)
## Introduction
@@ -156,3 +158,47 @@ If you would like to exclude a file by providing an exact path to the file, you
]
}
```
+
+
+## Continuous Integration
+
+
+### GitHub Actions
+
+To automate linting your project with Laravel Pint, you can configure [GitHub Actions](https://github.com/features/actions) to run Pint whenever new code is pushed to GitHub. First, be sure to grant "Read and write permissions" to workflows within GitHub at **Settings > Actions > General > Workflow permissions**. Then, create a `.github/workflows/lint.yml` file with the following content:
+
+```yaml
+name: Fix Code Style
+
+on: [push]
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: true
+ matrix:
+ php: [8.3]
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php }}
+ extensions: json, dom, curl, libxml, mbstring
+ coverage: none
+
+ - name: Install Pint
+ run: composer global require laravel/pint
+
+ - name: Run Pint
+ run: pint
+
+ - name: Commit linted files
+ uses: stefanzweifel/git-auto-commit-action@v5
+ with:
+ commit_message: "Fixes coding style"
+```
From 782f498fdbac5fedffc491f5e6f512d5603e87a7 Mon Sep 17 00:00:00 2001
From: Janos Horvath
Date: Tue, 21 May 2024 19:39:10 +0200
Subject: [PATCH 049/325] Fix typo in passing named argument (#9666)
previous code was still working but not for the right reasons
---
collections.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/collections.md b/collections.md
index fc9c1cb5fb1..b4317bd22a1 100644
--- a/collections.md
+++ b/collections.md
@@ -2131,7 +2131,7 @@ The `search` method searches the collection for the given value and returns its
The search is done using a "loose" comparison, meaning a string with an integer value will be considered equal to an integer of the same value. To use "strict" comparison, pass `true` as the second argument to the method:
- collect([2, 4, 6, 8])->search('4', $strict = true);
+ collect([2, 4, 6, 8])->search('4', strict: true);
// false
From 57be710a7a19ef854ddcb658e1bdb89958ab8571 Mon Sep 17 00:00:00 2001
From: Len Woodward
Date: Wed, 22 May 2024 08:09:17 -0700
Subject: [PATCH 050/325] [11.x] Adds documentation for Command::fail method
(#9669)
* [11.x] Adds documentation for Command::fail method
* Update artisan.md
---------
Co-authored-by: Taylor Otwell
---
artisan.md | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/artisan.md b/artisan.md
index 6009fdb38a5..6c6f92da589 100644
--- a/artisan.md
+++ b/artisan.md
@@ -158,6 +158,19 @@ Let's take a look at an example command. Note that we are able to request any de
> [!NOTE]
> For greater code reuse, it is good practice to keep your console commands light and let them defer to application services to accomplish their tasks. In the example above, note that we inject a service class to do the "heavy lifting" of sending the e-mails.
+
+#### Exit Codes
+
+If nothing is returned from the `handle` method and the command executes successfully, the command will exit with a `0` exit code, indicating success. However, the `handle` method may optionally return an integer to manually specify command's exit code:
+
+ $this->error('Something went wrong.');
+
+ return 1;
+
+If you would like to "fail" the command from another method within the command, you may utilize the `fail` method. The `fail` method will immediately terminate execution of the command and return an exit code of `1`:
+
+ $this->fail('Something went wrong.');
+
### Closure Commands
From b4ad31972d5e8a4859b3fc860f85879ba17c0a12 Mon Sep 17 00:00:00 2001
From: Taylor Otwell
Date: Wed, 22 May 2024 10:10:33 -0500
Subject: [PATCH 051/325] wip
---
artisan.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/artisan.md b/artisan.md
index 6c6f92da589..645163c9c81 100644
--- a/artisan.md
+++ b/artisan.md
@@ -167,7 +167,7 @@ If nothing is returned from the `handle` method and the command executes success
return 1;
-If you would like to "fail" the command from another method within the command, you may utilize the `fail` method. The `fail` method will immediately terminate execution of the command and return an exit code of `1`:
+If you would like to "fail" the command from any method within the command, you may utilize the `fail` method. The `fail` method will immediately terminate execution of the command and return an exit code of `1`:
$this->fail('Something went wrong.');
From 0638b0001a8f66274a2c0129d1ccda0f09dc056f Mon Sep 17 00:00:00 2001
From: Mahmudul Hasan
Date: Mon, 27 May 2024 19:42:36 +0600
Subject: [PATCH 052/325] Fix invalid route declarations (#9677)
- Fixed invalid view route declarations in quickstart-selling-products section
---
billing.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/billing.md b/billing.md
index f29dafaf9f0..24bf203762b 100644
--- a/billing.md
+++ b/billing.md
@@ -266,8 +266,8 @@ To charge customers for non-recurring, single-charge products, we'll utilize Cas
]);
})->name('checkout');
- Route::view('checkout.success')->name('checkout-success');
- Route::view('checkout.cancel')->name('checkout-cancel');
+ Route::view('/checkout/success', 'checkout.success')->name('checkout-success');
+ Route::view('/checkout/cancel', 'checkout.cancel')->name('checkout-cancel');
As you can see in the example above, we will utilize Cashier's provided `checkout` method to redirect the customer to Stripe Checkout for a given "price identifier". When using Stripe, "prices" refer to [defined prices for specific products](https://stripe.com/docs/products-prices/how-products-and-prices-work).
From fddaff4f44b4094e73c61ae81234fe5139cc7425 Mon Sep 17 00:00:00 2001
From: Chris Arter
Date: Mon, 27 May 2024 09:45:58 -0400
Subject: [PATCH 053/325] [11.x] Documents removeAllFromSearch method (#9676)
* documents removeAllFromSearch method
* Update scout.md
---------
Co-authored-by: Taylor Otwell
---
scout.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/scout.md b/scout.md
index 535fb5bb18b..2a2c28246bb 100644
--- a/scout.md
+++ b/scout.md
@@ -595,6 +595,10 @@ Or, if you already have a collection of Eloquent models in memory, you may call
$orders->unsearchable();
+To remove all of the model records from their corresponding index, you may invoke the `removeAllFromSearch` method:
+
+ Order::removeAllFromSearch();
+
### Pausing Indexing
From cdcb337a5d0fca73777d3453dd263eea02e81095 Mon Sep 17 00:00:00 2001
From: Taylor Otwell
Date: Tue, 28 May 2024 14:49:33 -0500
Subject: [PATCH 054/325] wip
---
prompts.md | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/prompts.md b/prompts.md
index d61dbb0c668..1c29bfdb2ee 100644
--- a/prompts.md
+++ b/prompts.md
@@ -421,6 +421,14 @@ $categories = multiselect(
);
```
+You may allow the user to easily select all options via the `canSelectAll` argument:
+
+$categories = multiselect(
+ label: 'What categories should be assigned?',
+ options: Category::pluck('name', 'id'),
+ canSelectAll: true
+);
+
#### Requiring a Value
From 83acdf1ce7b6ba0940b1bfbbab95ad5a609f88f4 Mon Sep 17 00:00:00 2001
From: Hany Mohamed
Date: Thu, 30 May 2024 20:13:22 +0400
Subject: [PATCH 055/325] Fix typo in shouldQueue method description (#9682)
---
events.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/events.md b/events.md
index 719b17954cf..2a8bbfc6f20 100644
--- a/events.md
+++ b/events.md
@@ -328,7 +328,7 @@ If you would like to define the listener's queue connection, queue name, or dela
#### Conditionally Queueing Listeners
-Sometimes, you may need to determine whether a listener should be queued based on some data that are only available at runtime. To accomplish this, a `shouldQueue` method may be added to a listener to determine whether the listener should be queued. If the `shouldQueue` method returns `false`, the listener will not be executed:
+Sometimes, you may need to determine whether a listener should be queued based on some data that are only available at runtime. To accomplish this, a `shouldQueue` method may be added to a listener to determine whether the listener should be queued. If the `shouldQueue` method returns `false`, the listener will not be queued:
Date: Fri, 31 May 2024 18:27:52 +0200
Subject: [PATCH 056/325] Update matchAll to include first only matching group
(#9683)
* Update matchAll to include first only matching group
* Update strings.md
---------
Co-authored-by: Taylor Otwell
---
strings.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/strings.md b/strings.md
index 102f67d31f3..43551e42bb8 100644
--- a/strings.md
+++ b/strings.md
@@ -2031,7 +2031,7 @@ The `matchAll` method will return a collection containing the portions of a stri
// collect(['bar', 'bar'])
-If you specify a matching group within the expression, Laravel will return a collection of that group's matches:
+If you specify a matching group within the expression, Laravel will return a collection of the first matching group's matches:
use Illuminate\Support\Str;
From 0dc4bc30eaa44c960dce4b4e0d4397b953167571 Mon Sep 17 00:00:00 2001
From: William David Edwards
Date: Thu, 6 Jun 2024 16:16:22 +0200
Subject: [PATCH 057/325] Remove libevent and libev from Reverb docs.
Deprecated from React's event loop in
https://github.com/reactphp/event-loop/pull/273 (#9693)
---
reverb.md | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/reverb.md b/reverb.md
index 48065d6dba1..e1ecb5a0dee 100644
--- a/reverb.md
+++ b/reverb.md
@@ -225,13 +225,9 @@ forge hard nofile 10000
Under the hood, Reverb uses a ReactPHP event loop to manage WebSocket connections on the server. By default, this event loop is powered by `stream_select`, which doesn't require any additional extensions. However, `stream_select` is typically limited to 1,024 open files. As such, if you plan to handle more than 1,000 concurrent connections, you will need to use an alternative event loop not bound to the same restrictions.
-Reverb will automatically switch to an `ext-event`, `ext-ev`, or `ext-uv` powered loop when available. All of these PHP extensions are available for install via PECL:
+Reverb will automatically switch to an `ext-uv` powered loop when available. This PHP extension is available for install via PECL:
```sh
-pecl install event
-# or
-pecl install ev
-# or
pecl install uv
```
From 45770c3785bddd5a79d0fe8f5a8bfa5cd81867e6 Mon Sep 17 00:00:00 2001
From: Arjay Angeles
Date: Thu, 6 Jun 2024 22:37:56 +0800
Subject: [PATCH 058/325] docs(migrations): NoPendingMigrations - nothing to
migrate event (#9692)
* docs(migrations): NoPendingMigrations - nothing to migrate event
Add ed`NoPendingMigrations` event when there is nothing to migrate
* Update migrations.md
---------
Co-authored-by: Taylor Otwell
---
migrations.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/migrations.md b/migrations.md
index 6df04a5d488..e5a31935952 100644
--- a/migrations.md
+++ b/migrations.md
@@ -1221,5 +1221,6 @@ For convenience, each migration operation will dispatch an [event](/docs/{{versi
| `Illuminate\Database\Events\MigrationsEnded` | A batch of migrations has finished executing. |
| `Illuminate\Database\Events\MigrationStarted` | A single migration is about to be executed. |
| `Illuminate\Database\Events\MigrationEnded` | A single migration has finished executing. |
+| `Illuminate\Database\Events\NoPendingMigrations` | A migration command found no pending migrations. |
| `Illuminate\Database\Events\SchemaDumped` | A database schema dump has completed. |
| `Illuminate\Database\Events\SchemaLoaded` | An existing database schema dump has loaded. |
From ef9f016ecda27acfad32d402290c2ac9a48072a3 Mon Sep 17 00:00:00 2001
From: Milwad Khosravi <98118400+milwad-dev@users.noreply.github.com>
Date: Sun, 9 Jun 2024 19:59:01 +0330
Subject: [PATCH 059/325] [11.x] Add example for `updateOrInsert` method in
queries (#9695)
* Update queries.md
* Update queries.md
* Update queries.md
---------
Co-authored-by: Taylor Otwell
---
queries.md | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/queries.md b/queries.md
index 94ff47f6905..ca6417d44d3 100644
--- a/queries.md
+++ b/queries.md
@@ -1026,6 +1026,22 @@ The `updateOrInsert` method will attempt to locate a matching database record us
['votes' => '2']
);
+You may provide a closure to the `updateOrInsert` method to customize the attributes that are updated or inserted into the database based on the existence of a matching record:
+
+```php
+DB::table('users')->updateOrInsert(
+ ['user_id' => $user_id],
+ fn ($exists) => $exists ? [
+ 'name' => $data['name'],
+ 'email' => $data['email'],
+ ] : [
+ 'name' => $data['name'],
+ 'email' => $data['email'],
+ 'marketable' => true,
+ ],
+);
+```
+
### Updating JSON Columns
From 38e549f8ec44e64769390ffd965728055f3b443b Mon Sep 17 00:00:00 2001
From: David Lambauer
Date: Mon, 10 Jun 2024 17:12:23 +0200
Subject: [PATCH 060/325] table() expects an array, collection given (#9698)
---
prompts.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/prompts.md b/prompts.md
index 1c29bfdb2ee..fb7d19eab18 100644
--- a/prompts.md
+++ b/prompts.md
@@ -805,7 +805,7 @@ use function Laravel\Prompts\table;
table(
['Name', 'Email'],
- User::all(['name', 'email'])
+ User::all(['name', 'email'])->toArray()
);
```
From ec9ff5137928e2e6932664514b112ae12aaf7901 Mon Sep 17 00:00:00 2001
From: maru0914 <56859729+maru0914@users.noreply.github.com>
Date: Tue, 11 Jun 2024 00:13:03 +0900
Subject: [PATCH 061/325] Remove unnecessary imports from the first example
(#9697)
---
container.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/container.md b/container.md
index fbe5fa2c496..1fe0e8921cc 100644
--- a/container.md
+++ b/container.md
@@ -29,9 +29,7 @@ Let's look at a simple example:
namespace App\Http\Controllers;
- use App\Http\Controllers\Controller;
use App\Repositories\UserRepository;
- use App\Models\User;
use Illuminate\View\View;
class UserController extends Controller
From 669bb1c9dbb19687837e6062fab81a0fbe255858 Mon Sep 17 00:00:00 2001
From: Cas Ebbers <617080+CasEbb@users.noreply.github.com>
Date: Tue, 11 Jun 2024 20:55:33 +0200
Subject: [PATCH 062/325] Fix call to Model::increment() (#9699)
---
eloquent.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/eloquent.md b/eloquent.md
index 0a5cd0d4135..a4142ed29a1 100644
--- a/eloquent.md
+++ b/eloquent.md
@@ -313,7 +313,7 @@ If you need to customize the names of the columns used to store the timestamps,
If you would like to perform model operations without the model having its `updated_at` timestamp modified, you may operate on the model within a closure given to the `withoutTimestamps` method:
- Model::withoutTimestamps(fn () => $post->increment(['reads']));
+ Model::withoutTimestamps(fn () => $post->increment('reads'));
### Database Connections
From 39d960362f89761836c2f59d6aa51173fb94bd18 Mon Sep 17 00:00:00 2001
From: Volodya Kurshudyan <70023120+xurshudyan@users.noreply.github.com>
Date: Wed, 12 Jun 2024 17:59:39 +0400
Subject: [PATCH 063/325] Add default value in `Cache::pull` method (#9702)
* Add default value in Cache::pull method
* Update cache.md
---------
Co-authored-by: Xurshudyan
Co-authored-by: Taylor Otwell
---
cache.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/cache.md b/cache.md
index 169e6b63711..e2a6751eee7 100644
--- a/cache.md
+++ b/cache.md
@@ -209,6 +209,8 @@ If you need to retrieve an item from the cache and then delete the item, you may
$value = Cache::pull('key');
+ $value = Cache::pull('key', 'default');
+
### Storing Items in the Cache
From 329323efb2a054fa1b6fcdd93cdd264622283d8f Mon Sep 17 00:00:00 2001
From: Wes Hooper
Date: Wed, 12 Jun 2024 15:05:37 +0100
Subject: [PATCH 064/325] Clarify exclusions for fallback HTTP error pages
(#9701)
* Clarify exclusions for fallback HTTP error pages
* Update errors.md
---------
Co-authored-by: Taylor Otwell
---
errors.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/errors.md b/errors.md
index 038caec7b8e..c04a842ceea 100644
--- a/errors.md
+++ b/errors.md
@@ -410,4 +410,6 @@ php artisan vendor:publish --tag=laravel-errors
#### Fallback HTTP Error Pages
-You may also define a "fallback" error page for a given series of HTTP status codes. This page will be rendered if there is not a corresponding page for the specific HTTP status code that occurred. To accomplish this, define a `4xx.blade.php` template and a `5xx.blade.php` template in your application's `resources/views/errors` directory.
+You may also define a "fallback" error page for a given series of HTTP status codes. This page will be rendered if there is not a corresponding page for the specific HTTP status code that occurred. To accomplish this, define a `4xx.blade.php` template and a `5xx.blade.php` template in your application's `resources/views/errors` directory.
+
+When defining fallback error pages, the fallback pages will not affect `404`, `500`, and `503` error responses since Laravel has internal, dedicated pages for these status codes. To customize the pages rendered for these status codes, you should define a custom error page for each of them individually.
From 9555e96b0920afefda9c4f5440fce758f2180be4 Mon Sep 17 00:00:00 2001
From: Gustavo Karkow <14905932+karkowg@users.noreply.github.com>
Date: Thu, 13 Jun 2024 21:42:44 -0400
Subject: [PATCH 065/325] Document using wildcards in Horizon environments
(#9706)
* document wildcard in horizon environments
* Update horizon.md
---------
Co-authored-by: Taylor Otwell
---
horizon.md | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/horizon.md b/horizon.md
index 8e90e2bed3b..66d44d8999a 100644
--- a/horizon.md
+++ b/horizon.md
@@ -74,6 +74,18 @@ After installation, the primary Horizon configuration option that you should fam
],
],
+You may also define a wildcard environment (`*`) which will be used when no other matching environment is found:
+
+ 'environments' => [
+ // ...
+
+ '*' => [
+ 'supervisor-1' => [
+ 'maxProcesses' => 3,
+ ],
+ ],
+ ],
+
When you start Horizon, it will use the worker process configuration options for the environment that your application is running on. Typically, the environment is determined by the value of the `APP_ENV` [environment variable](/docs/{{version}}/configuration#determining-the-current-environment). For example, the default `local` Horizon environment is configured to start three worker processes and automatically balance the number of worker processes assigned to each queue. The default `production` environment is configured to start a maximum of 10 worker processes and automatically balance the number of worker processes assigned to each queue.
> [!WARNING]
From 64eb35ea054ff657e27aba694e8c1a8fae8d2f80 Mon Sep 17 00:00:00 2001
From: Anthony Cooper
Date: Tue, 18 Jun 2024 18:22:04 +0100
Subject: [PATCH 066/325] Fix Lottery helper method name (#9711)
---
helpers.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helpers.md b/helpers.md
index 5906469c047..d1db1245855 100644
--- a/helpers.md
+++ b/helpers.md
@@ -2360,7 +2360,7 @@ Laravel provides some simple methods to allow you to easily test your applicatio
Lottery::fix([true, false]);
// Lottery will return to normal behavior...
- Lottery::determineResultsNormally();
+ Lottery::determineResultNormally();
### Pipeline
From 92826a1f2422358b0d17bea19e13ecfa1e1aff6f Mon Sep 17 00:00:00 2001
From: Taylor Otwell
Date: Tue, 18 Jun 2024 12:23:15 -0500
Subject: [PATCH 067/325] Revert "Fix Lottery helper method name (#9711)"
(#9712)
This reverts commit 64eb35ea054ff657e27aba694e8c1a8fae8d2f80.
---
helpers.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helpers.md b/helpers.md
index d1db1245855..5906469c047 100644
--- a/helpers.md
+++ b/helpers.md
@@ -2360,7 +2360,7 @@ Laravel provides some simple methods to allow you to easily test your applicatio
Lottery::fix([true, false]);
// Lottery will return to normal behavior...
- Lottery::determineResultNormally();
+ Lottery::determineResultsNormally();
### Pipeline
From c6cffbab1697acf7e53bd52646ec72b432635113 Mon Sep 17 00:00:00 2001
From: Ryuta Hamasaki
Date: Wed, 19 Jun 2024 02:47:08 +0900
Subject: [PATCH 068/325] [11.x] Add `before` and `after` methods to Collection
(#9700)
* add documentation for "before" method
* add documentation for "after" method
* mark "after" method as the first collection method
* formatting
---------
Co-authored-by: Taylor Otwell
---
collections.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 57 insertions(+), 1 deletion(-)
diff --git a/collections.md b/collections.md
index b4317bd22a1..38124cf783f 100644
--- a/collections.md
+++ b/collections.md
@@ -94,9 +94,11 @@ For the majority of the remaining collection documentation, we'll discuss each m
+[after](#method-after)
[all](#method-all)
[average](#method-average)
[avg](#method-avg)
+[before](#method-before)
[chunk](#method-chunk)
[chunkWhile](#method-chunkwhile)
[collapse](#method-collapse)
@@ -255,8 +257,37 @@ For the majority of the remaining collection documentation, we'll discuss each m
}
+
+#### `after()` {.collection-method .first-collection-method}
+
+The `after` method returns the item after the given item. `null` is returned if the given item is not found or is the last item:
+
+ $collection = collect([1, 2, 3, 4, 5]);
+
+ $collection->after(3);
+
+ // 4
+
+ $collection->after(5);
+
+ // null
+
+This method searches for the given item using "loose" comparison, meaning a string containing an integer value will be considered equal to an integer of the same value. To use "strict" comparison, you may provide the `strict` argument to the method:
+
+ collect([2, 4, 6, 8])->after('4', strict: true);
+
+ // null
+
+Alternatively, you may provide your own closure to search for the first item that passes a given truth test:
+
+ collect([2, 4, 6, 8])->after(function (int $item, int $key) {
+ return $item > 5;
+ });
+
+ // 8
+
-#### `all()` {.collection-method .first-collection-method}
+#### `all()` {.collection-method}
The `all` method returns the underlying array represented by the collection:
@@ -287,6 +318,31 @@ The `avg` method returns the [average value](https://en.wikipedia.org/wiki/Avera
// 2
+
+#### `before()` {.collection-method}
+
+The `before` method is the opposite of the [`after`](#method-after) method. It returns the item before the given item. `null` is returned if the given item is not found or is the first item:
+
+ $collection = collect([1, 2, 3, 4, 5]);
+
+ $collection->before(3);
+
+ // 2
+
+ $collection->before(1);
+
+ // null
+
+ collect([2, 4, 6, 8])->before('4', strict: true);
+
+ // null
+
+ collect([2, 4, 6, 8])->before(function (int $item, int $key) {
+ return $item > 5;
+ });
+
+ // 4
+
#### `chunk()` {.collection-method}
From c802e4ce57c4e56b43e0b59a8a588b68bbecf26b Mon Sep 17 00:00:00 2001
From: HarryLee186 <34167106+HarryLee186@users.noreply.github.com>
Date: Thu, 20 Jun 2024 08:29:55 +0100
Subject: [PATCH 069/325] Update upgrade.md to include Scout dependency (#9714)
---
upgrade.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/upgrade.md b/upgrade.md
index eb3ffb22f4a..f1c49f053ca 100644
--- a/upgrade.md
+++ b/upgrade.md
@@ -79,6 +79,7 @@ You should update the following dependencies in your application's `composer.jso
- `laravel/octane` to `^2.3` (If installed)
- `laravel/passport` to `^12.0` (If installed)
- `laravel/sanctum` to `^4.0` (If installed)
+- `laravel/scout` to `^10.0` (If installed)
- `laravel/spark-stripe` to `^5.0` (If installed)
- `laravel/telescope` to `^5.0` (If installed)
- `inertiajs/inertia-laravel` to `^1.0` (If installed)
From 910898f77947c560ed9e1017b15314229a4bd1b6 Mon Sep 17 00:00:00 2001
From: Benedikt Franke
Date: Thu, 20 Jun 2024 16:37:04 +0200
Subject: [PATCH 070/325] Remove notes from bootstrap/providers.php (#9715)
Follows the default from `laravel/laravel`, see https://github.com/laravel/laravel/commit/dd6777099d757eb714b2dd8b12709ed440e9a1d2.
---
providers.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/providers.md b/providers.md
index 4d6c2709e1d..f68718dfb67 100644
--- a/providers.md
+++ b/providers.md
@@ -149,8 +149,6 @@ All service providers are registered in the `bootstrap/providers.php` configurat
Date: Fri, 21 Jun 2024 00:07:41 +0200
Subject: [PATCH 071/325] Add Herd installation guide (#9717)
* add Herd setup instructions
* wip
* use official lowercase letters for nginx and dnsmasq
* wip
* wip
---------
Co-authored-by: Marcel Pociot
Co-authored-by: Taylor Otwell
---
installation.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 55 insertions(+), 2 deletions(-)
diff --git a/installation.md b/installation.md
index 56c43e782a9..beeff46dcfd 100644
--- a/installation.md
+++ b/installation.md
@@ -7,6 +7,9 @@
- [Environment Based Configuration](#environment-based-configuration)
- [Databases and Migrations](#databases-and-migrations)
- [Directory Configuration](#directory-configuration)
+- [Local Installation Using Herd](#local-installation-using-herd)
+ - [Herd on macOS](#herd-on-macos)
+ - [Herd on Windows](#herd-on-windows)
- [Docker Installation Using Sail](#docker-installation-using-sail)
- [Sail on macOS](#sail-on-macos)
- [Sail on Windows](#sail-on-windows)
@@ -53,7 +56,7 @@ Laravel combines the best packages in the PHP ecosystem to offer the most robust
## Creating a Laravel Project
-Before creating your first Laravel project, make sure that your local machine has PHP and [Composer](https://getcomposer.org) installed. If you are developing on macOS or Windows, PHP and Composer can be installed in minutes via [Laravel Herd](https://herd.laravel.com). In addition, we recommend [installing Node and NPM](https://nodejs.org).
+Before creating your first Laravel project, make sure that your local machine has PHP and [Composer](https://getcomposer.org) installed. If you are developing on macOS or Windows, PHP, Composer, Node and NPM can be installed in minutes via [Laravel Herd](#local-installation-using-herd).
After you have installed PHP and Composer, you may create a new Laravel project via Composer's `create-project` command:
@@ -124,13 +127,63 @@ php artisan migrate
```
> [!NOTE]
-> If you are developing on macOS and need to install MySQL, PostgreSQL, or Redis locally, consider using [DBngin](https://dbngin.com/).
+> If you are developing on macOS or Windows and need to install MySQL, PostgreSQL, or Redis locally, consider using [Herd Pro](https://herd.laravel.com/#plans).
### Directory Configuration
Laravel should always be served out of the root of the "web directory" configured for your web server. You should not attempt to serve a Laravel application out of a subdirectory of the "web directory". Attempting to do so could expose sensitive files present within your application.
+
+## Local Installation Using Herd
+
+[Laravel Herd](https://herd.laravel.com) is a blazing fast, native Laravel and PHP development environment for macOS and Windows. Herd includes everything you need to get started with Laravel development, including PHP and Nginx.
+
+Once you install Herd, you're ready to start developing with Laravel. Herd includes command line tools for `php`, `composer`, `laravel`, `expose`, `node`, `npm`, and `nvm`.
+
+> [!NOTE]
+> [Herd Pro](https://herd.laravel.com/#plans) augments Herd with additional powerful features, such as the ability to create and manage local MySQL, Postgres, and Redis databases, as well as local mail viewing and log monitoring.
+
+
+### Herd on macOS
+
+If you develop on macOS, you can download the Herd installer from the [Herd website](https://herd.laravel.com). The installer automatically downloads the latest version of PHP and configures your Mac to always run [Nginx](https://www.nginx.com/) in the background.
+
+Herd for macOS uses [dnsmasq](https://en.wikipedia.org/wiki/Dnsmasq) to support "parked" directories. Any Laravel application in a parked directory will automatically be served by Herd. By default, Herd creates a parked directory at `~/Herd` and you can access any Laravel application in this directory on the `.test` domain using its directory name.
+
+After installing Herd, the fastest way to create a new Laravel project is using the Laravel CLI, which is bundled with Herd:
+
+```nothing
+cd ~/Herd
+laravel new my-app
+cd my-app
+herd open
+```
+
+Of course, you can always manage your parked directories and other PHP settings via Herd's UI, which can be opened from the Herd menu in your system tray.
+
+You can learn more about Herd by checking out the [Herd documentation](https://herd.laravel.com/docs).
+
+
+### Herd on Windows
+
+You can download the Windows installer for Herd on the [Herd website](https://herd.laravel.com/windows). After the installation finishes, you can start Herd to complete the onboarding process and access the Herd UI for the first time.
+
+The Herd UI is accessible by left-clicking on Herd's system tray icon. A right-click opens the quick menu with access to all tools that you need on a daily basis.
+
+During installation, Herd creates a "parked" directory in your home directory at `%USERPROFILE%\Herd`. Any Laravel application in a parked directory will automatically be served by Herd, and you can access any Laravel application in this directory on the `.test` domain using its directory name.
+
+After installing Herd, the fastest way to create a new Laravel project is using the Laravel CLI, which is bundled with Herd. To get started, open Powershell and run the following commands:
+
+```nothing
+cd ~\Herd
+laravel new my-app
+cd my-app
+herd open
+```
+
+You can learn more about Herd by checking out the [Herd documentation for Windows](https://herd.laravel.com/docs/windows).
+
## Docker Installation Using Sail
From e7889864abbe68b9591dbca38809fd03599b8adf Mon Sep 17 00:00:00 2001
From: Spencer Williams
Date: Fri, 21 Jun 2024 08:55:55 -0700
Subject: [PATCH 072/325] Add crucial note about folder permissions to
deployment.md (#9718)
* Add crucial note about folder permissions
* This will help old and new devs understand which folders
the framework needs to write in so that folder permissions
are not too open.
* Add new folder-permissions anchor to top list of links
* Update deployment.md
---------
Co-authored-by: Taylor Otwell
---
deployment.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/deployment.md b/deployment.md
index 421ccaf8c5b..1cc4a57297f 100644
--- a/deployment.md
+++ b/deployment.md
@@ -5,6 +5,7 @@
- [Server Configuration](#server-configuration)
- [Nginx](#nginx)
- [FrankenPHP](#frankenphp)
+ - [Directory Permissions](#directory-permissions)
- [Optimization](#optimization)
- [Caching Configuration](#optimizing-configuration-loading)
- [Caching Events](#caching-events)
@@ -100,6 +101,11 @@ frankenphp php-server -r public/
To take advantage of more powerful features supported by FrankenPHP, such as its [Laravel Octane](/docs/{{version}}/octane) integration, HTTP/3, modern compression, or the ability to package Laravel applications as standalone binaries, please consult FrankenPHP's [Laravel documentation](https://frankenphp.dev/docs/laravel/).
+
+### Directory Permissions
+
+Laravel will need to write to the `bootstrap/cache` and `storage` directories, so you should ensure the web server process owner has permission to write to these directories.
+
## Optimization
From 33d43e187d466be64edb49b63f135a268fd7fb2c Mon Sep 17 00:00:00 2001
From: Dries Vints
Date: Mon, 24 Jun 2024 17:09:13 +0200
Subject: [PATCH 073/325] Update Homestead entry in package list (#9721)
---
contributions.md | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/contributions.md b/contributions.md
index 9d2b7dd050a..4e25e01ea6f 100644
--- a/contributions.md
+++ b/contributions.md
@@ -36,8 +36,7 @@ The Laravel source code is managed on GitHub, and there are repositories for eac
- [Laravel Envoy](https://github.com/laravel/envoy)
- [Laravel Folio](https://github.com/laravel/folio)
- [Laravel Framework](https://github.com/laravel/framework)
-- [Laravel Homestead](https://github.com/laravel/homestead)
-- [Laravel Homestead Build Scripts](https://github.com/laravel/settler)
+- [Laravel Homestead](https://github.com/laravel/homestead) ([Build Scripts](https://github.com/laravel/settler))
- [Laravel Horizon](https://github.com/laravel/horizon)
- [Laravel Jetstream](https://github.com/laravel/jetstream)
- [Laravel Passport](https://github.com/laravel/passport)
From e6443d6177b0de2d6a620fd7a9be8569f74fd839 Mon Sep 17 00:00:00 2001
From: maru0914 <56859729+maru0914@users.noreply.github.com>
Date: Fri, 28 Jun 2024 01:09:35 +0900
Subject: [PATCH 074/325] Add concrete domain name directory to example code
(#9725)
---
events.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/events.md b/events.md
index 2a8bbfc6f20..2c84b318632 100644
--- a/events.md
+++ b/events.md
@@ -71,7 +71,7 @@ By default, Laravel will automatically find and register your event listeners by
If you plan to store your listeners in a different directory or within multiple directories, you may instruct Laravel to scan those directories using the `withEvents` method in your application's `bootstrap/app.php` file:
->withEvents(discover: [
- __DIR__.'/../app/Domain/Listeners',
+ __DIR__.'/../app/Domain/Orders/Listeners',
])
The `event:list` command may be used to list all of the listeners registered within your application:
From 5f9c66744b1ba6cc2de8c533a061a9a953baa83b Mon Sep 17 00:00:00 2001
From: Gabi Suciu
Date: Fri, 28 Jun 2024 23:05:33 +0300
Subject: [PATCH 075/325] Added missing dependency upgrade `livewire/livewire`
(#9727)
---
upgrade.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/upgrade.md b/upgrade.md
index f1c49f053ca..a5d380c972e 100644
--- a/upgrade.md
+++ b/upgrade.md
@@ -82,6 +82,7 @@ You should update the following dependencies in your application's `composer.jso
- `laravel/scout` to `^10.0` (If installed)
- `laravel/spark-stripe` to `^5.0` (If installed)
- `laravel/telescope` to `^5.0` (If installed)
+- `livewire/livewire` to `^3.4` (If installed)
- `inertiajs/inertia-laravel` to `^1.0` (If installed)
From 0117812a0237bfcb1989336b146d6bfbe8b8b696 Mon Sep 17 00:00:00 2001
From: Joe Dixon
Date: Mon, 1 Jul 2024 21:49:35 +0100
Subject: [PATCH 076/325] [11.x] Adds warning for Reverb URI (#9730)
* add warning for reverb uri
* Update reverb.md
* Update reverb.md
---------
Co-authored-by: Taylor Otwell
---
reverb.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/reverb.md b/reverb.md
index e1ecb5a0dee..627068d2965 100644
--- a/reverb.md
+++ b/reverb.md
@@ -257,6 +257,9 @@ server {
}
```
+> [!WARNING]
+> Reverb listens for WebSocket connections at `/app` and handles API requests at `/apps`. You should ensure the web server handling Reverb requests can serve both of these URIs. If you are using [Laravel Forge](https://forge.laravel.com) to manage your servers, your Reverb server will be correctly configured by default.
+
Typically, web servers are configured to limit the number of allowed connections in order to prevent overloading the server. To increase the number of allowed connections on an Nginx web server to 10,000, the `worker_rlimit_nofile` and `worker_connections` values of the `nginx.conf` file should be updated:
```nginx
From 2256340f468601a95a63fc1c1b61e3762e9b97e1 Mon Sep 17 00:00:00 2001
From: Tim MacDonald
Date: Wed, 3 Jul 2024 04:04:37 +1000
Subject: [PATCH 077/325] [11.x] Document Str::chop* methods (#9726)
* Document Str::chop* methods
* formatting
---------
Co-authored-by: Taylor Otwell
---
strings.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/strings.md b/strings.md
index 43551e42bb8..ff3566a28ce 100644
--- a/strings.md
+++ b/strings.md
@@ -43,6 +43,8 @@ Laravel includes a variety of functions for manipulating string values. Many of
[Str::betweenFirst](#method-str-between-first)
[Str::camel](#method-camel-case)
[Str::charAt](#method-char-at)
+[Str::chopStart](#method-str-chop-start)
+[Str::chopEnd](#method-str-chop-end)
[Str::contains](#method-str-contains)
[Str::containsAll](#method-str-contains-all)
[Str::endsWith](#method-ends-with)
@@ -134,6 +136,8 @@ Laravel includes a variety of functions for manipulating string values. Many of
[camel](#method-fluent-str-camel)
[charAt](#method-fluent-str-char-at)
[classBasename](#method-fluent-str-class-basename)
+[chopStart](#method-fluent-str-chop-start)
+[chopEnd](#method-fluent-str-chop-end)
[contains](#method-fluent-str-contains)
[containsAll](#method-fluent-str-contains-all)
[dirname](#method-fluent-str-dirname)
@@ -377,6 +381,44 @@ The `Str::charAt` method returns the character at the specified index. If the in
// 's'
+
+#### `Str::chopStart()` {.collection-method}
+
+The `Str::chopStart` method removes the first occurrence of the given value only if the value appears at the start of the string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::chopStart('https://laravel.com', 'https://');
+
+ // 'laravel.com'
+
+You may also pass an array as the second argument. If the string starts with any of the values in the array then that value will be removed from string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::chopStart('http://laravel.com', ['https://', 'http://']);
+
+ // 'laravel.com'
+
+
+#### `Str::chopEnd()` {.collection-method}
+
+The `Str::chopEnd` method removes the last occurrence of the given value only if the value appears at the end of the string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::chopEnd('app/Models/Photograph.php', '.php');
+
+ // 'app/Models/Photograph'
+
+You may also pass an array as the second argument. If the string ends with any of the values in the array then that value will be removed from string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::chopEnd('laravel.com/index.php', ['/index.html', '/index.php']);
+
+ // 'laravel.com'
+
#### `Str::contains()` {.collection-method}
@@ -1587,6 +1629,44 @@ The `classBasename` method returns the class name of the given class with the cl
// 'Baz'
+
+#### `chopStart` {.collection-method}
+
+The `chopStart` method removes the first occurrence of the given value only if the value appears at the start of the string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::of('https://laravel.com')->chopStart('https://');
+
+ // 'laravel.com'
+
+You may also pass an array. If the string starts with any of the values in the array then that value will be removed from string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::of('http://laravel.com')->chopStart(['https://', 'http://']);
+
+ // 'laravel.com'
+
+
+#### `chopEnd` {.collection-method}
+
+The `chopEnd` method removes the last occurrence of the given value only if the value appears at the end of the string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::of('https://laravel.com')->chopEnd('https://');
+
+ // 'laravel.com'
+
+You may also pass an array. If the string ends with any of the values in the array then that value will be removed from string:
+
+ use Illuminate\Support\Str;
+
+ $url = Str::of('http://laravel.com')->chopEnd(['https://', 'http://']);
+
+ // 'laravel.com'
+
#### `contains` {.collection-method}
From 0599e7c4b9509b7e7dd311069debaca1c27b08b1 Mon Sep 17 00:00:00 2001
From: Milwad Khosravi <98118400+milwad-dev@users.noreply.github.com>
Date: Thu, 4 Jul 2024 00:30:14 +0330
Subject: [PATCH 078/325] [1.x] Add `multiply` method to collection (#9731)
* add `multiply` method to collection
* Update collections.md
* Update collections.md
---------
Co-authored-by: Taylor Otwell
---
collections.md | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/collections.md b/collections.md
index 38124cf783f..c4cfff89371 100644
--- a/collections.md
+++ b/collections.md
@@ -163,6 +163,7 @@ For the majority of the remaining collection documentation, we'll discuss each m
[mergeRecursive](#method-mergerecursive)
[min](#method-min)
[mode](#method-mode)
+[multiply](#method-multiply)
[nth](#method-nth)
[only](#method-only)
[pad](#method-pad)
@@ -1689,6 +1690,29 @@ The `mode` method returns the [mode value](https://en.wikipedia.org/wiki/Mode_(s
// [1, 2]
+
+#### `multiply()` {.collection-method}
+
+The `multiply` method creates the specified number of copies of all items in the collection:
+
+```php
+$users = collect([
+ ['name' => 'User #1', 'email' => 'user1@example.com'],
+ ['name' => 'User #2', 'email' => 'user2@example.com'],
+])->multiply(3);
+
+/*
+ [
+ ['name' => 'User #1', 'email' => 'user1@example.com'],
+ ['name' => 'User #2', 'email' => 'user2@example.com'],
+ ['name' => 'User #1', 'email' => 'user1@example.com'],
+ ['name' => 'User #2', 'email' => 'user2@example.com'],
+ ['name' => 'User #1', 'email' => 'user1@example.com'],
+ ['name' => 'User #2', 'email' => 'user2@example.com'],
+ ]
+*/
+```
+
#### `nth()` {.collection-method}
From ae9631f61bd97b40e61aa0e81375d115414bc8d1 Mon Sep 17 00:00:00 2001
From: Dries Vints
Date: Thu, 4 Jul 2024 16:13:43 +0200
Subject: [PATCH 079/325] Remove tax warning for single charges (#9733)
---
billing.md | 3 ---
1 file changed, 3 deletions(-)
diff --git a/billing.md b/billing.md
index 24bf203762b..dbc9b1e58a6 100644
--- a/billing.md
+++ b/billing.md
@@ -200,9 +200,6 @@ Once tax calculation has been enabled, any new subscriptions and any one-off inv
For this feature to work properly, your customer's billing details, such as the customer's name, address, and tax ID, need to be synced to Stripe. You may use the [customer data synchronization](#syncing-customer-data-with-stripe) and [Tax ID](#tax-ids) methods offered by Cashier to accomplish this.
-> [!WARNING]
-> No tax is calculated for [single charges](#single-charges) or [single charge checkouts](#single-charge-checkouts).
-
### Logging
From 3ab73d96f69f08d996ec613d2382855dd79710ef Mon Sep 17 00:00:00 2001
From: Philip Downer
Date: Thu, 4 Jul 2024 08:14:37 -0600
Subject: [PATCH 080/325] Fixes grammar for queue/connection customization
heading (#9732)
---
queues.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/queues.md b/queues.md
index 57c3f6fecde..723b65bba01 100644
--- a/queues.md
+++ b/queues.md
@@ -933,7 +933,7 @@ When chaining jobs, you may use the `catch` method to specify a closure that sho
> Since chain callbacks are serialized and executed at a later time by the Laravel queue, you should not use the `$this` variable within chain callbacks.
-### Customizing The Queue a Connection
+### Customizing the Queue and Connection
#### Dispatching to a Particular Queue
From eb257374f1b48862572c496e1e500ba550dd807a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tam=C3=A1s=20H?=
<36476318+Tamas-hi@users.noreply.github.com>
Date: Fri, 5 Jul 2024 17:59:44 +0200
Subject: [PATCH 081/325] Update broadcasting.md (#9741)
Since Laravel Reverb is no longer in beta, we can remove the info message from the documentation.
---
broadcasting.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/broadcasting.md b/broadcasting.md
index 385b1b01516..6fb7ebad010 100644
--- a/broadcasting.md
+++ b/broadcasting.md
@@ -91,10 +91,10 @@ Before broadcasting any events, you should first configure and run a [queue work
### Reverb
-When running the `install:broadcasting` command, you will be prompted to install [Laravel Reverb](/docs/{{version}}/reverb). Of course, you may also install Reverb manually using the Composer package manager. Since Reverb is currently in beta, you will need to explicitly install the beta release:
+When running the `install:broadcasting` command, you will be prompted to install [Laravel Reverb](/docs/{{version}}/reverb). Of course, you may also install Reverb manually 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, add Reverb's required environment variables, and enable event broadcasting in your application:
From c1e2f0e094846ec98e618c36a3d09966fca8ce61 Mon Sep 17 00:00:00 2001
From: Maru <56859729+maru0914@users.noreply.github.com>
Date: Sat, 6 Jul 2024 00:59:58 +0900
Subject: [PATCH 082/325] Remove an unnecessary double quote (#9739)
---
helpers.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helpers.md b/helpers.md
index 5906469c047..aaac1146fa0 100644
--- a/helpers.md
+++ b/helpers.md
@@ -1867,7 +1867,7 @@ An array of contextual data may also be passed to the function:
#### `literal()` {.collection-method}
-"The `literal` function creates a new [stdClass](https://www.php.net/manual/en/class.stdclass.php) instance with the given named arguments as properties:
+The `literal` function creates a new [stdClass](https://www.php.net/manual/en/class.stdclass.php) instance with the given named arguments as properties:
$obj = literal(
name: 'Joe',
From fd2151dcac919bba2935dc325b9490c2185fe594 Mon Sep 17 00:00:00 2001
From: Maru <56859729+maru0914@users.noreply.github.com>
Date: Sat, 6 Jul 2024 01:00:32 +0900
Subject: [PATCH 083/325] Fix results of Number::currency() example (#9738)
---
helpers.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/helpers.md b/helpers.md
index aaac1146fa0..7f2ecbba42e 100644
--- a/helpers.md
+++ b/helpers.md
@@ -1218,15 +1218,15 @@ The `Number::currency` method returns the currency representation of the given v
$currency = Number::currency(1000);
- // $1,000
+ // $1,000.00
$currency = Number::currency(1000, in: 'EUR');
- // €1,000
+ // €1,000.00
$currency = Number::currency(1000, in: 'EUR', locale: 'de');
- // 1.000 €
+ // 1.000,00 €
#### `Number::fileSize()` {.collection-method}
From 8fbc1e3a96523dbf21116b58e213e69d110350a6 Mon Sep 17 00:00:00 2001
From: Jonathan Goode
Date: Fri, 5 Jul 2024 17:03:07 +0100
Subject: [PATCH 084/325] Align with `waitForRoute()` making it more obvious
how to pass parameters (#9740)
---
dusk.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dusk.md b/dusk.md
index 6987eb7d3c2..22acb86dccc 100644
--- a/dusk.md
+++ b/dusk.md
@@ -423,7 +423,7 @@ The `visit` method may be used to navigate to a given URI within your applicatio
You may use the `visitRoute` method to navigate to a [named route](/docs/{{version}}/routing#named-routes):
- $browser->visitRoute('login');
+ $browser->visitRoute($routeName, $parameters);
You may navigate "back" and "forward" using the `back` and `forward` methods:
From a39ad9cb9e0512df3cba8163a405616683373459 Mon Sep 17 00:00:00 2001
From: Jonas Staudenmeir
Date: Mon, 8 Jul 2024 16:42:43 +0200
Subject: [PATCH 085/325] Improve database support for JSON queries (#9744)
---
queries.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/queries.md b/queries.md
index ca6417d44d3..8646b135512 100644
--- a/queries.md
+++ b/queries.md
@@ -552,7 +552,7 @@ WHERE published = true AND (
### JSON Where Clauses
-Laravel also supports querying JSON column types on databases that provide support for JSON column types. Currently, this includes MySQL 8.0+, PostgreSQL 12.0+, SQL Server 2017+, and SQLite 3.39.0+ (with the [JSON1 extension](https://www.sqlite.org/json1.html)). To query a JSON column, use the `->` operator:
+Laravel also supports querying JSON column types on databases that provide support for JSON column types. Currently, this includes MariaDB 10.3+, MySQL 8.0+, PostgreSQL 12.0+, SQL Server 2017+, and SQLite 3.39.0+. To query a JSON column, use the `->` operator:
$users = DB::table('users')
->where('preferences->dining->meal', 'salad')
@@ -564,7 +564,7 @@ You may use `whereJsonContains` to query JSON arrays:
->whereJsonContains('options->languages', 'en')
->get();
-If your application uses the MySQL or PostgreSQL databases, you may pass an array of values to the `whereJsonContains` method:
+If your application uses the MariaDB, MySQL, or PostgreSQL databases, you may pass an array of values to the `whereJsonContains` method:
$users = DB::table('users')
->whereJsonContains('options->languages', ['en', 'de'])
@@ -1045,7 +1045,7 @@ DB::table('users')->updateOrInsert(
### Updating JSON Columns
-When updating a JSON column, you should use `->` syntax to update the appropriate key in the JSON object. This operation is supported on MySQL 5.7+ and PostgreSQL 9.5+:
+When updating a JSON column, you should use `->` syntax to update the appropriate key in the JSON object. This operation is supported on MariaDB 10.3+, MySQL 5.7+, and PostgreSQL 9.5+:
$affected = DB::table('users')
->where('id', 1)
From 714d793e2cdb215897ca5f3618a54ef9505ba802 Mon Sep 17 00:00:00 2001
From: Anne Douwe Bouma
Date: Mon, 8 Jul 2024 16:43:52 +0200
Subject: [PATCH 086/325] Precognition: Replace attribute `for` with `htmlFor`
in React example (#9743)
The `for` attribute is not allowed in JSX syntax and should be replaced with `htmlFor`
---
precognition.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/precognition.md b/precognition.md
index 4dc62c6de60..600c96ae9b2 100644
--- a/precognition.md
+++ b/precognition.md
@@ -247,7 +247,7 @@ export default function Form() {
return (