diff --git a/docs/artisan.md b/docs/artisan.md
index b5f441c..70f5129 100644
--- a/docs/artisan.md
+++ b/docs/artisan.md
@@ -264,6 +264,10 @@ Tinker использует список «разрешенных» команд
mail:send {user} {--Q|queue}
+При вызове команды в терминале псевдонимы опций должны начинаться с одиночного дефиса:
+
+ php artisan mail:send 1 -Q
+
### Массивы данных
diff --git a/docs/broadcasting.md b/docs/broadcasting.md
index ec76cc1..e0ee1b6 100644
--- a/docs/broadcasting.md
+++ b/docs/broadcasting.md
@@ -428,6 +428,18 @@ Echo.private(`orders.${orderId}`)
*/
public $queue = 'default';
+Кроме того, вы можете изменить имя очереди, определив метод `broadcastQueue` для вашего события:
+
+ /**
+ * Имя очереди, в которую нужно поместить задание трансляции.
+ *
+ * @return string
+ */
+ public function broadcastQueue()
+ {
+ return 'default';
+ }
+
Если вы хотите транслировать свое событие с помощью очереди `sync` вместо драйвера очереди по умолчанию, то вы можете реализовать интерфейс `ShouldBroadcastNow` вместо `ShouldBroadcast`:
+#### `pipeThrough()`
+
+Метод `pipeThrough` передает коллекцию указанному массиву замыканий и возвращает результат выполненных замыканий:
+
+ $collection = collect([1, 2, 3]);
+
+ $result = $collection->pipeThrough([
+ function ($collection) {
+ return $collection->merge([4, 5]);
+ },
+ function ($collection) {
+ return $collection->sum();
+ },
+ ]);
+
+ // 15
+
#### `pluck()`
diff --git a/docs/configuration.md b/docs/configuration.md
index 03a922b..ac7788c 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -150,6 +150,8 @@ null | (null) null
При доступе к этому скрытому маршруту вы будете перенаправлены на маршрут `/` приложения. Как только куки будет отправлен вашему браузеру, вы сможете просматривать приложение в обычном режиме, как если бы оно не находилось в режиме обслуживания.
+> {tip} Ваш токен режима обслуживания обычно должен состоять из буквенно-цифровых символов и, при необходимости, тире. Вам следует избегать использования в URL-адресах специфичных символов, таких как `?`.
+
#### Предварительный рендеринг шаблона режима обслуживания
diff --git a/docs/eloquent.md b/docs/eloquent.md
index 476d1d1..9ae1f8a 100644
--- a/docs/eloquent.md
+++ b/docs/eloquent.md
@@ -605,7 +605,7 @@ Eloquent также предлагает поддержку расширенны
->where('destination', 'San Diego')
->update(['delayed' => 1]);
-Метод `update` ожидает массив пар ключей и значений, представляющих столбцы, которые должны быть обновлены.
+Метод `update` ожидает массив пар ключей и значений, представляющих столбцы, которые должны быть обновлены. Метод `update` возвращает количество затронутых строк.
> {note} События модели Eloquent `saving`, `saved`, `updating` и `updated` при массовом обновлении **не будут инициированы** для затронутых моделей. Это связано с тем, что модели фактически никогда не извлекаются при массовом обновлении.
@@ -789,7 +789,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
Конечно, вы можете создать запрос Eloquent для удаления всех моделей, соответствующих условиям запроса. В этом примере мы удалим все рейсы, помеченные как неактивные. Как и массовые обновления, массовые удаления не вызывают никаких событий модели для удаляемых моделей:
- $deletedRows = Flight::where('active', 0)->delete();
+ $deleted = Flight::where('active', 0)->delete();
> {note} События модели Eloquent `deleting` и `deleted` при массовом удалении не будут инициированы для удаленных моделей. Это связано с тем, что модели фактически не извлекаются при выполнении оператора `delete`.
diff --git a/docs/filesystem.md b/docs/filesystem.md
index a83b673..d7cd948 100644
--- a/docs/filesystem.md
+++ b/docs/filesystem.md
@@ -92,13 +92,13 @@ Laravel обеспечивает мощную абстракцию файлов
'ftp' => [
'driver' => 'ftp',
- 'host' => 'ftp.example.com',
- 'username' => 'your-username',
- 'password' => 'your-password',
+ 'host' => env('FTP_HOST'),
+ 'username' => env('FTP_USERNAME'),
+ 'password' => env('FTP_PASSWORD'),
// Optional FTP Settings...
- // 'port' => 21,
- // 'root' => '',
+ // 'port' => env('FTP_PORT', 21),
+ // 'root' => env('FTP_ROOT'),
// 'passive' => true,
// 'ssl' => true,
// 'timeout' => 30,
@@ -111,17 +111,19 @@ Laravel обеспечивает мощную абстракцию файлов
'sftp' => [
'driver' => 'sftp',
- 'host' => 'example.com',
- 'username' => 'your-username',
- 'password' => 'your-password',
+ 'host' => env('SFTP_HOST'),
- // Settings for SSH key based authentication...
- 'privateKey' => '/path/to/privateKey',
- 'password' => 'encryption-password',
+ // Settings for basic authentication...
+ 'username' => env('SFTP_USERNAME'),
+ 'password' => env('SFTP_PASSWORD'),
+
+ // Settings for SSH key based authentication with encryption password...
+ 'privateKey' => env('SFTP_PRIVATE_KEY'),
+ 'password' => env('SFTP_PASSWORD'),
// Optional SFTP Settings...
- // 'port' => 22,
- // 'root' => '',
+ // 'port' => env('SFTP_PORT', 22),
+ // 'root' => env('SFTP_ROOT'),
// 'timeout' => 30,
],
diff --git a/docs/helpers.md b/docs/helpers.md
index a540e1a..37d79d4 100644
--- a/docs/helpers.md
+++ b/docs/helpers.md
@@ -132,8 +132,9 @@ Laravel содержит множество глобальных «вспомо
- [Str::studly](#method-studly-case)
- [Str::substr](#method-str-substr)
- [Str::substrCount](#method-str-substrcount)
+- [Str::substrReplace](#method-str-substrreplace)
- [Str::title](#method-title-case)
-- [Str::toHtmlString](#method-to-html-string)
+- [Str::toHtmlString](#method-str-to-html-string)
- [Str::ucfirst](#method-str-ucfirst)
- [Str::upper](#method-str-upper)
- [Str::uuid](#method-str-uuid)
@@ -156,6 +157,7 @@ Laravel содержит множество глобальных «вспомо
- [basename](#method-fluent-str-basename)
- [before](#method-fluent-str-before)
- [beforeLast](#method-fluent-str-before-last)
+- [between](#method-fluent-str-between)
- [camel](#method-fluent-str-camel)
- [contains](#method-fluent-str-contains)
- [containsAll](#method-fluent-str-contains-all)
@@ -199,6 +201,7 @@ Laravel содержит множество глобальных «вспомо
- [startsWith](#method-fluent-str-starts-with)
- [studly](#method-fluent-str-studly)
- [substr](#method-fluent-str-substr)
+- [substrReplace](#method-fluent-str-substrreplace)
- [tap](#method-fluent-str-tap)
- [test](#method-fluent-str-test)
- [title](#method-fluent-str-title)
@@ -206,7 +209,17 @@ Laravel содержит множество глобальных «вспомо
- [ucfirst](#method-fluent-str-ucfirst)
- [upper](#method-fluent-str-upper)
- [when](#method-fluent-str-when)
+- [whenContains](#method-fluent-str-when-contains)
+- [whenContainsAll](#method-fluent-str-when-contains-all)
- [whenEmpty](#method-fluent-str-when-empty)
+- [whenNotEmpty](#method-fluent-str-when-not-empty)
+- [whenStartsWith](#method-fluent-str-when-starts-with)
+- [whenEndsWith](#method-fluent-str-when-ends-with)
+- [whenExactly](#method-fluent-str-when-exactly)
+- [whenIs](#method-fluent-str-when-is)
+- [whenIsAscii](#method-fluent-str-when-is-ascii)
+- [whenIsUuid](#method-fluent-str-when-is-uuid)
+- [whenTest](#method-fluent-str-when-test)
- [wordCount](#method-fluent-str-word-count)
- [words](#method-fluent-str-words)
@@ -1697,6 +1710,19 @@ Laravel содержит множество глобальных «вспомо
// 2
+
+#### `Str::substrReplace()`
+
+Метод `Str::substrReplace` заменяет часть строки, начиная с позиции, указанной третьим аргументом, и заменяет число символов, указанное четвертым аргументом. Передача `0` в четвертый аргумент метода вставит строку в указанную позицию без замены каких-либо существующих символов в строке:
+
+ use Illuminate\Support\Str;
+
+ $result = Str::substrReplace('1300', ':', 2);
+ // 13:
+
+ $result = Str::substrReplace('1300', ':', 2, 0);
+ // 13:00
+
#### `Str::title()`
@@ -1878,6 +1904,17 @@ Str::wordCount('Hello, world!'); // 2
// 'This '
+
+#### `between`
+
+Метод `between` возвращает часть строки между двумя значениями:
+
+ use Illuminate\Support\Str;
+
+ $converted = Str::of('This is my name')->between('This', 'name');
+
+ // ' is my '
+
#### `camel`
@@ -2506,6 +2543,21 @@ If no matches are found, an empty collection will be returned.
// Frame
+
+#### `substrReplace`
+
+Метод `substrReplace` заменяет часть строки, начиная с позиции, указанной третьим аргументом, и заменяет число символов, указанное четвертым аргументом. Передача `0` в четвертый аргумент метода вставит строку в указанную позицию без замены каких-либо существующих символов в строке:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('1300')->substrReplace(':', 2);
+
+ // 13:
+
+ $string = Str::of('The Framework')->substrReplace(' Laravel', 3, 0);
+
+ // The Laravel Framework
+
#### `tap`
@@ -2597,6 +2649,49 @@ If no matches are found, an empty collection will be returned.
При необходимости вы можете передать другое замыкание в качестве третьего параметра методу `when`. Это замыкание будет выполнено, если параметр условия оценивается как `false`.
+
+#### `whenContains`
+
+Метод `whenContains` вызывает указанное замыкание, если строка содержит переданное значение. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('tony stark')
+ ->whenContains('tony', function ($string) {
+ return $string->title();
+ });
+
+ // 'Tony Stark'
+
+При необходимости вы можете передать другое замыкание в качестве третьего параметра метода `whenContains`. Это замыкание будет выполнено, если строка не содержит переданного значения.
+
+Вы также можете передать массив значений, чтобы определить, содержит ли переданная строка какие-либо значения в массиве:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('tony stark')
+ ->whenContains(['tony', 'hulk'], function ($string) {
+ return $string->title();
+ });
+
+ // Tony Stark
+
+
+#### `whenContainsAll`
+
+Метод `whenContainsAll` вызывает указанное замыкание, если строка содержит все переданные подстроки. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('tony stark')
+ ->whenContainsAll(['tony', 'stark'], function ($string) {
+ return $string->title();
+ });
+
+ // 'Tony Stark'
+
+При необходимости вы можете передать другое замыкание в качестве третьего параметра методу `whenContainsAll`. Это замыкание будет выполнено, если параметр условия оценивается как `false`.
+
#### `whenEmpty`
@@ -2610,6 +2705,110 @@ If no matches are found, an empty collection will be returned.
// 'Laravel'
+
+#### `whenNotEmpty`
+
+Метод `whenNotEmpty` вызывает переданное замыкание, если строка не пуста. Если замыкание возвращает значение, то это значение также будет возвращено методом `whenNotEmpty`. Если замыкание не возвращает значение, будет возвращен Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('Framework')->whenNotEmpty(function ($string) {
+ return $string->prepend('Laravel ');
+ });
+
+ // 'Laravel Framework'
+
+
+#### `whenStartsWith`
+
+Метод `whenStartsWith` вызывает переданное замыкание, если строка начинается с заданной подстроки. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('disney world')->whenStartsWith('disney', function ($string) {
+ return $string->title();
+ });
+
+ // 'Disney World'
+
+
+#### `whenEndsWith`
+
+Метод `whenEndsWith` вызывает переданное замыкание, если строка заканчивается заданной подстрокой. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('disney world')->whenEndsWith('world', function ($string) {
+ return $string->title();
+ });
+
+ // 'Disney World'
+
+
+#### `whenExactly`
+
+Метод `whenExactly` вызывает переданное замыкание, если строка точно соответствует заданной строке. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('laravel')->whenExactly('laravel', function ($string) {
+ return $string->title();
+ });
+
+ // 'Laravel'
+
+
+#### `whenIs`
+
+Метод `whenIs` вызывает переданное замыкание, если строка соответствует заданному шаблону. Допускается использование метасимвола подстановки `*`. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('foo/bar')->whenIs('foo/*', function ($string) {
+ return $string->append('/baz');
+ });
+
+ // 'foo/bar/baz'
+
+
+#### `whenIsAscii`
+
+Метод `whenIsAscii` вызывает переданное замыкание, если строка представляет собой 7-битный ASCII. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('foo/bar')->whenIsAscii('laravel', function ($string) {
+ return $string->title();
+ });
+
+ // 'Laravel'
+
+
+#### `whenIsUuid`
+
+Метод `whenIsUuid` вызывает переданное замыкание, если строка является допустимым UUID. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('foo/bar')->whenIsUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de', function ($string) {
+ return $string->substr(0, 8);
+ });
+
+ // 'a0a2a2d2'
+
+
+#### `whenTest`
+
+Метод `whenTest` вызывает переданное замыкание, если строка соответствует заданному регулярному выражению. Замыкание получит экземпляр Fluent:
+
+ use Illuminate\Support\Str;
+
+ $string = Str::of('laravel framework')->whenTest('/laravel/', function ($string) {
+ return $string->title();
+ });
+
+ // 'Laravel Framework'
+
#### `wordCount`
diff --git a/docs/http-client.md b/docs/http-client.md
index f6f0661..df4e875 100644
--- a/docs/http-client.md
+++ b/docs/http-client.md
@@ -10,6 +10,7 @@
- [Обработка ошибок](#error-handling)
- [Параметры Guzzle](#guzzle-options)
- [Параллельные запросы](#concurrent-requests)
+- [Макрокоманды](#macros)
- [Тестирование](#testing)
- [Фиктивные ответы](#faking-responses)
- [Инспектирование запросов](#inspecting-requests)
@@ -265,6 +266,35 @@ Laravel предлагает минимальный и выразительны
return $responses['first']->ok();
+
+## Macros
+
+HTTP-клиент Laravel позволяет вам определять «макрокоманды», которые могут служить гибким, выразительным механизмом для задания общих путей и заголовков запросов при взаимодействии со службами в вашем приложении. Для начала вы можете определить макрокоманду в методе `boot` поставщика `App\Providers\AppServiceProvider` вашего приложения:
+
+```php
+use Illuminate\Support\Facades\Http;
+
+/**
+ * Загрузка любых служб приложения.
+ *
+ * @return void
+ */
+public function boot()
+{
+ Http::macro('github', function () {
+ return Http::withHeaders([
+ 'X-Example' => 'example',
+ ])->baseUrl('https://github.com');
+ });
+}
+```
+
+После того, как ваша макрокоманда создана, вы можете вызывать ее из любого места вашего приложения, чтобы создать запрос с указанной конфигурацией:
+
+```php
+$response = Http::github()->get('/');
+```
+
## Тестирование
diff --git a/docs/logging.md b/docs/logging.md
index 9d80774..f59164d 100644
--- a/docs/logging.md
+++ b/docs/logging.md
@@ -94,6 +94,19 @@ PHP, Laravel и другие библиотеки часто уведомляю
'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
+ 'channels' => [
+ ...
+ ]
+
+Или вы можете определить канал журнала с именем `deprecations`. Если канал журнала с таким именем существует, то он всегда будет использоваться для регистрации устаревания:
+
+ 'channels' => [
+ 'deprecations' => [
+ 'driver' => 'single',
+ 'path' => storage_path('logs/php-deprecation-warnings.log'),
+ ],
+ ],
+
## Построение стека журналов
diff --git a/docs/queries.md b/docs/queries.md
index d789bf9..e05d9f2 100644
--- a/docs/queries.md
+++ b/docs/queries.md
@@ -849,7 +849,7 @@ where exists (
## Обновление
-Помимо вставки записей в базу данных, построитель запросов также может обновлять существующие записи с помощью метода `update`. Метод `update`, как и метод `insert`, принимает массив пар столбцов и значений, указывающих столбцы, которые нужно обновить. Вы можете ограничить запрос `update` с помощью выражений `WHERE`:
+Помимо вставки записей в базу данных, построитель запросов также может обновлять существующие записи с помощью метода `update`. Метод `update`, как и метод `insert`, принимает массив пар столбцов и значений, указывающих столбцы, которые нужно обновить. Метод `update` возвращает количество затронутых строк. Вы можете ограничить запрос `update` с помощью выражений `WHERE`:
$affected = DB::table('users')
->where('id', 1)
@@ -897,11 +897,11 @@ where exists (
## Удаление
-Метод `delete` построителя запросов может использоваться для удаления записей из таблицы. Вы можете ограничить операторы `delete`, добавив метод `where` перед вызовом метода `delete`:
+Метод `delete` построителя запросов может использоваться для удаления записей из таблицы. Метод `delete` возвращает количество затронутых строк. Вы можете ограничить операторы `delete`, добавив метод `where` перед вызовом метода `delete`:
- DB::table('users')->delete();
+ $deleted =DB::table('users')->delete();
- DB::table('users')->where('votes', '>', 100)->delete();
+ $deleted =DB::table('users')->where('votes', '>', 100)->delete();
Если вы хотите очистить всю таблицу, что приведет к удалению всех записей из таблицы и сбросу автоинкрементного идентификатора на ноль, вы можете использовать метод `truncate`:
diff --git a/docs/sail.md b/docs/sail.md
index f91c472..bae9918 100644
--- a/docs/sail.md
+++ b/docs/sail.md
@@ -20,6 +20,7 @@
- [Предварительный просмотр писем](#previewing-emails)
- [Контейнер CLI](#sail-container-cli)
- [Выбор версии PHP](#sail-php-versions)
+- [Выбор версии Node](#sail-node-versions)
- [Совместный доступ к вашему сайту](#sharing-your-site)
- [Отладка с помощью Xdebug](#debugging-with-xdebug)
- [Использование Xdebug CLI](#xdebug-cli-usage)
@@ -336,6 +337,24 @@ context: ./vendor/laravel/sail/runtimes/7.4
image: sail-8.1/app
```
+После обновления файла `docker-compose.yml` вашего приложения вы должны перестроить образы контейнеров:
+
+ sail build --no-cache
+
+ sail up
+
+
+## Выбор версии Node
+
+Sail по умолчанию устанавливает Node 16. Чтобы изменить версию Node, установленную при создании образов, вы можете обновить определение `build.args` службы `laravel.test` в файле `docker-compose.yml` вашего приложения:
+
+```yaml
+build:
+ args:
+ WWWGROUP: '${WWWGROUP}'
+ NODE_VERSION: '14'
+```
+
После обновления файла `docker-compose.yml` вашего приложения вы должны перестроить образы контейнеров:
sail build --no-cache
diff --git a/docs/validation.md b/docs/validation.md
index 10f42e1..e531fda 100644
--- a/docs/validation.md
+++ b/docs/validation.md
@@ -793,6 +793,7 @@ Laravel также содержит глобального помощника `o
- [In Array](#rule-in-array)
- [Integer](#rule-integer)
- [IP Address](#rule-ip)
+- [MAC Address](#rule-mac)
- [JSON](#rule-json)
- [Less Than](#rule-lt)
- [Less Than Or Equal](#rule-lte)
@@ -1224,6 +1225,11 @@ public function boot()
Проверяемое поле должно быть адресом IPv6.
+
+#### mac_address
+
+Проверяемое поле должно быть MAC-адресом.
+
#### json