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