diff --git a/docs/artisan.md b/docs/artisan.md index 1b5c01c..b5f441c 100644 --- a/docs/artisan.md +++ b/docs/artisan.md @@ -300,7 +300,7 @@ Tinker использует список «разрешенных» команд */ protected $signature = 'mail:send {user : The ID of the user} - {--queue= : Whether the job should be queued}'; + {--queue : Whether the job should be queued}'; ## Ввод/вывод команды diff --git a/docs/authorization.md b/docs/authorization.md index c9a65de..36331b9 100644 --- a/docs/authorization.md +++ b/docs/authorization.md @@ -6,6 +6,7 @@ - [Авторизация действий через шлюзы](#authorizing-actions-via-gates) - [Ответы шлюза](#gate-responses) - [Хуки шлюзов](#intercepting-gate-checks) + - [Упрощенная авторизация](#inline-authorization) - [Создание политик](#creating-policies) - [Генерация политик](#generating-policies) - [Регистрация политик](#registering-policies) @@ -219,6 +220,21 @@ Laravel предлагает два основных способа автори Подобно методу `before`, если замыкание `after` возвращает результат, отличный от `null`, то этот результат и будет считаться результатом проверки авторизации. + +### Упрощенная авторизация + +Вы можете определить авторизован ли текущий аутентифицированный пользователь для выполнения конкретного действия без написания специального шлюза, соответствующего этому действию. Laravel позволяет вам выполнять такие типы «упрощенных» проверок авторизации с помощью методов `Gate::allowIf` и `Gate::denyIf`: + +```php +use Illuminate\Support\Facades\Auth; + +Gate::allowIf(fn ($user) => $user->isAdministrator()); + +Gate::denyIf(fn ($user) => $user->banned()); +``` + +Если действие не авторизовано или пользователь в настоящее время не аутентифицирован, то Laravel автоматически выбросит исключение `Illuminate\Auth\Access\AuthorizationException`. Экземпляры `AuthorizationException` автоматически преобразуются в `403` HTTP-ответ обработчиком исключений Laravel. + ## Создание политик diff --git a/docs/billing.md b/docs/billing.md index 4545d5e..baf1255 100644 --- a/docs/billing.md +++ b/docs/billing.md @@ -68,7 +68,7 @@ ## Introduction -Laravel Cashier provides an expressive, fluent interface to [Stripe's](https://stripe.com) subscription billing services. It handles almost all of the boilerplate subscription billing code you are dreading writing. In addition to basic subscription management, Cashier can handle coupons, swapping subscription, subscription "quantities", cancellation grace periods, and even generate invoice PDFs. +[Laravel Cashier Stripe](https://github.com/laravel/cashier-stripe) provides an expressive, fluent interface to [Stripe's](https://stripe.com) subscription billing services. It handles almost all of the boilerplate subscription billing code you are dreading writing. In addition to basic subscription management, Cashier can handle coupons, swapping subscription, subscription "quantities", cancellation grace periods, and even generate invoice PDFs. ## Upgrading Cashier @@ -330,7 +330,9 @@ To automate this, you may define an event listener on your billable model that r protected static function booted() { static::updated(queueable(function ($customer) { - $customer->syncStripeCustomerDetails(); + if ($customer->hasStripeId()) { + $customer->syncStripeCustomerDetails(); + } })); } @@ -1349,7 +1351,7 @@ By default, the created webhook will point to the URL defined by the `APP_URL` e The webhook that is created will use the Stripe API version that your version of Cashier is compatible with. If you would like to use a different Stripe version, you may provide the `--api-version` option: - php artisan cashier:webhook --app-version="2019-12-03" + php artisan cashier:webhook --api-version="2019-12-03" After creation, the webhook will be immediately active. If you wish to create the webhook but have it disabled until you're ready, you may provide the `--disabled` option when invoking the command: diff --git a/docs/broadcasting.md b/docs/broadcasting.md index 4391b78..2e313d3 100644 --- a/docs/broadcasting.md +++ b/docs/broadcasting.md @@ -133,7 +133,7 @@ The [laravel-websockets](https://github.com/beyondcode/laravel-websockets) packa ### Pusher Channels -Laravel Echo – это JavaScript-библиотека, которая позволяет безболезненно подписаться на каналы и прослушивать события, транслируемые вашим драйвером трансляции на стороне сервера. Вы можете установить Echo через менеджер пакетов NPM. В этом примере мы также установим пакет `pusher-js`, так как мы будем использовать вещатель Pusher Channels: +[Laravel Echo](https://github.com/laravel/echo) – это JavaScript-библиотека, которая позволяет безболезненно подписаться на каналы и прослушивать события, транслируемые вашим драйвером трансляции на стороне сервера. Вы можете установить Echo через менеджер пакетов NPM. В этом примере мы также установим пакет `pusher-js`, так как мы будем использовать вещатель Pusher Channels: ```bash npm install --save-dev laravel-echo pusher-js @@ -180,7 +180,7 @@ window.Echo = new Echo({ ### Ably -Laravel Echo – это JavaScript-библиотека, которая позволяет безболезненно подписаться на каналы и прослушивать события, транслируемые вашим драйвером трансляции на стороне сервера. Вы можете установить Echo через менеджер пакетов NPM. В этом примере мы также установим пакет `pusher-js`. +[Laravel Echo](https://github.com/laravel/echo) – это JavaScript-библиотека, которая позволяет безболезненно подписаться на каналы и прослушивать события, транслируемые вашим драйвером трансляции на стороне сервера. Вы можете установить Echo через менеджер пакетов NPM. В этом примере мы также установим пакет `pusher-js`. Вы можете задаться вопросом, зачем нам устанавливать библиотеку `pusher-js` JavaScript, даже если мы используем Ably для трансляции наших событий. К счастью, Ably имеет режим совместимости Pusher, который позволяет нам использовать протокол Pusher при прослушивании событий в нашем клиентском приложении: @@ -292,7 +292,7 @@ window.Echo = new Echo({ #### Прослушивание трансляций событий -Далее все, что остается, – это прослушивать событие в нашем JavaScript-приложении. Мы можем сделать это с помощью Laravel Echo. Во-первых, мы будем использовать метод `private` для подписки на частный канал. Затем мы можем использовать метод `listen` для прослушивания события `OrderShipmentStatusUpdated`. По умолчанию все публичные свойства события будут включены в трансляцию события: +Далее все, что остается, – это прослушивать событие в нашем JavaScript-приложении. Мы можем сделать это с помощью [Laravel Echo](#client-side-installation). Во-первых, мы будем использовать метод `private` для подписки на частный канал. Затем мы можем использовать метод `listen` для прослушивания события `OrderShipmentStatusUpdated`. По умолчанию все публичные свойства события будут включены в трансляцию события: ```js Echo.private(`orders.${orderId}`) diff --git a/docs/cashier-paddle.md b/docs/cashier-paddle.md index 1596edf..3304c99 100644 --- a/docs/cashier-paddle.md +++ b/docs/cashier-paddle.md @@ -46,7 +46,7 @@ ## Introduction -Laravel Cashier Paddle provides an expressive, fluent interface to [Paddle's](https://paddle.com) subscription billing services. It handles almost all of the boilerplate subscription billing code you are dreading. In addition to basic subscription management, Cashier can handle: coupons, swapping subscription, subscription "quantities", cancellation grace periods, and more. +[Laravel Cashier Paddle](https://github.com/laravel/cashier-paddle) provides an expressive, fluent interface to [Paddle's](https://paddle.com) subscription billing services. It handles almost all of the boilerplate subscription billing code you are dreading. In addition to basic subscription management, Cashier can handle: coupons, swapping subscription, subscription "quantities", cancellation grace periods, and more. While working with Cashier we recommend you also review Paddle's [user guides](https://developer.paddle.com/guides) and [API documentation](https://developer.paddle.com/api-reference/intro). diff --git a/docs/collections.md b/docs/collections.md index 8f02184..6124c69 100644 --- a/docs/collections.md +++ b/docs/collections.md @@ -109,6 +109,7 @@ - [diff](#method-diff) - [diffAssoc](#method-diffassoc) - [diffKeys](#method-diffkeys) +- [doesntContain](#method-doesntcontain) - [dump](#method-dump) - [duplicates](#method-duplicates) - [duplicatesStrict](#method-duplicatesstrict) @@ -228,11 +229,11 @@ ## Список методов @@ -386,7 +387,7 @@ #### `contains()` -Метод `contains` определяет, содержит ли коллекция переданный элемент. Вы также можете передать замыкание в `contains`, чтобы определить, существует ли в коллекции элемент, соответствующий указанному критерию истинности: +Метод `contains` определяет присутствие переданного элемента в коллекции. Вы также можете передать замыкание методу `contains`, чтобы определить присутствие элемента с указанным критерием истинности в коллекции: $collection = collect([1, 2, 3, 4, 5]); @@ -396,7 +397,7 @@ // false -Как вариант, вы можете передать строку методу `contains`, чтобы определить, содержит ли коллекция указанное значение элемента: +Как вариант, вы можете передать строку методу `contains`, чтобы определить присутствие элемента с указанным значением в коллекции: $collection = collect(['name' => 'Desk', 'price' => 100]); @@ -408,7 +409,7 @@ // false -Вы также можете передать пару ключ / значение методу `contains`, который определит, существует ли данная пара в коллекции: +Вы также можете передать пару ключ / значение методу `contains`, который определит присутствие переданной пары в коллекции: $collection = collect([ ['product' => 'Desk', 'price' => 200], @@ -421,6 +422,8 @@ Метод `contains` использует «гибкое» сравнение при проверке значений элементов, то есть строка с целочисленным значением будет считаться равной целому числу того же значения. Используйте метод [`containsStrict`](#method-containsstrict) для фильтрации с использованием «жесткого» сравнения. +Противоположным методу `contains` является метод [doesntContain](#method-doesntcontain). + #### `containsStrict()` @@ -584,6 +587,44 @@ // ['one' => 10, 'three' => 30, 'five' => 50] + +#### `doesntContain()` + +Метод `doesntContain` определяет отсутствие переданного элемента в коллекции. Вы также можете передать замыкание методу `doesntContain`, чтобы определить отсутствие элемента с указанным критерием истинности в коллекции: + + $collection = collect([1, 2, 3, 4, 5]); + + $collection->doesntContain(function ($value, $key) { + return $value < 5; + }); + + // false + +Как вариант, вы можете передать строку методу `doesntContain`, чтобы определить отсутствие элемента с указанным значением в коллекции: + + $collection = collect(['name' => 'Desk', 'price' => 100]); + + $collection->doesntContain('Table'); + + // true + + $collection->doesntContain('Desk'); + + // false + +Вы также можете передать пару ключ / значение методу `doesntContain`, который определит отсутствие переданной пары в коллекции: + + $collection = collect([ + ['product' => 'Desk', 'price' => 200], + ['product' => 'Chair', 'price' => 100], + ]); + + $collection->doesntContain('product', 'Bookcase'); + + // true + +Метод `doesntContain` использует «гибкое» сравнение при проверке значений элементов, то есть строка с целочисленным значением будет считаться равной целому числу того же значения. + #### `dump()` @@ -2102,7 +2143,7 @@ ] */ -Метод `sort` принимает [флаги типа сортировки](https://www.php.net/manual/ru/function.sort.php) в качестве второго аргумента: +Метод `sortBy` принимает [флаги типа сортировки](https://www.php.net/manual/ru/function.sort.php) в качестве второго аргумента: $collection = collect([ ['title' => 'Item 1'], diff --git a/docs/database-testing.md b/docs/database-testing.md index cdc0359..6fe9fdf 100644 --- a/docs/database-testing.md +++ b/docs/database-testing.md @@ -535,6 +535,7 @@ Laravel предлагает множество полезных инструм namespace Tests\Feature; use Database\Seeders\OrderStatusSeeder; + use Database\Seeders\TransactionStatusSeeder; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithoutMiddleware; use Tests\TestCase; @@ -557,6 +558,13 @@ Laravel предлагает множество полезных инструм $this->seed(OrderStatusSeeder::class); // ... + + // Запустить массив определенных наполнителей ... + $this->seed([ + OrderStatusSeeder::class, + TransactionStatusSeeder::class, + // ... + ]); } } diff --git a/docs/dusk.md b/docs/dusk.md index c2e2cc2..3ce080f 100644 --- a/docs/dusk.md +++ b/docs/dusk.md @@ -51,7 +51,7 @@ ## Введение -Laravel Dusk предлагает выразительный и простой в использовании API для автоматизации поведения браузера и тестирования. По умолчанию Dusk не требует установки JDK или Selenium на ваш локальный компьютер. Вместо этого Dusk использует автономную установку [ChromeDriver](https://sites.google.com/chromium.org/driver). По желанию вы можете использовать любой другой драйвер, совместимый с Selenium. +[Laravel Dusk](https://github.com/laravel/dusk) предлагает выразительный и простой в использовании API для автоматизации поведения браузера и тестирования. По умолчанию Dusk не требует установки JDK или Selenium на ваш локальный компьютер. Вместо этого Dusk использует автономную установку [ChromeDriver](https://sites.google.com/chromium.org/driver). По желанию вы можете использовать любой другой драйвер, совместимый с Selenium. ## Установка diff --git a/docs/eloquent-collections.md b/docs/eloquent-collections.md index 08a23ef..1432fcd 100644 --- a/docs/eloquent-collections.md +++ b/docs/eloquent-collections.md @@ -48,6 +48,14 @@ #collection-method-list a { display: block; } + + .collection-method code { + font-size: 14px; + } + + .collection-method:not(.first-collection-method) { + margin-top: 50px; + } --> diff --git a/docs/eloquent-mutators.md b/docs/eloquent-mutators.md index 34d569e..2478521 100644 --- a/docs/eloquent-mutators.md +++ b/docs/eloquent-mutators.md @@ -127,7 +127,7 @@ - `datetime` - `immutable_date` - `immutable_datetime` -- `decimal:` +- `decimal:`<digits> - `double` - `encrypted` - `encrypted:array` diff --git a/docs/eloquent.md b/docs/eloquent.md index b411e1f..476d1d1 100644 --- a/docs/eloquent.md +++ b/docs/eloquent.md @@ -388,6 +388,8 @@ Flight::where('departed', true) ->each->update(['departed' => false]); ``` +Вы можете фильтровать результаты по убыванию `id`, используя метод `lazyByIdDesc`. + ### Курсоры diff --git a/docs/fortify.md b/docs/fortify.md index 9a318e1..708362c 100644 --- a/docs/fortify.md +++ b/docs/fortify.md @@ -28,7 +28,7 @@ ## Введение -**Laravel Fortify** – это независимая от внешнего интерфейса серверная реализация аутентификации для Laravel. Fortify регистрирует маршруты и контроллеры, необходимые для реализации всего функционала аутентификации Laravel, включая вход в систему, регистрацию, сброс пароля, подтверждение электронной почты и многое другое. После установки Fortify вы можете запустить команду `route:list` Artisan, чтобы просмотреть маршруты, зарегистрированные Fortify. +[Laravel Fortify](https://github.com/laravel/fortify) – это независимая от внешнего интерфейса серверная реализация аутентификации для Laravel. Fortify регистрирует маршруты и контроллеры, необходимые для реализации всего функционала аутентификации Laravel, включая вход в систему, регистрацию, сброс пароля, подтверждение электронной почты и многое другое. После установки Fortify вы можете запустить команду `route:list` Artisan, чтобы просмотреть маршруты, зарегистрированные Fortify. Поскольку Fortify не обеспечен собственным пользовательским интерфейсом, он предназначен для работы в паре с вашим собственным пользовательским интерфейсом, который отправляет запросы на регистрируемые им маршруты. Мы обсудим, как именно делать запросы к этим маршрутам, в оставшейся части этой документации. diff --git a/docs/helpers.md b/docs/helpers.md index 3b2f042..fb9b4f4 100644 --- a/docs/helpers.md +++ b/docs/helpers.md @@ -56,6 +56,7 @@ Laravel содержит множество глобальных «вспомо - [Arr::toCssClasses](#method-array-to-css-classes) - [Arr::undot](#method-array-undot) - [Arr::where](#method-array-where) +- [Arr::whereNotNull](#method-array-where-not-null) - [Arr::wrap](#method-array-wrap) - [data_fill](#method-data-fill) - [data_get](#method-data-get) @@ -122,6 +123,7 @@ Laravel содержит множество глобальных «вспомо - [Str::replaceArray](#method-str-replace-array) - [Str::replaceFirst](#method-str-replace-first) - [Str::replaceLast](#method-str-replace-last) +- [Str::reverse](#method-str-reverse) - [Str::singular](#method-str-singular) - [Str::slug](#method-str-slug) - [Str::snake](#method-snake-case) @@ -282,11 +284,11 @@ Laravel содержит множество глобальных «вспомо ## Список методов @@ -830,6 +832,19 @@ Laravel содержит множество глобальных «вспомо // [1 => '200', 3 => '400'] + +#### `Arr::whereNotNull()` + +Метод `Arr::whereNotNull` удаляет все `null`-значения массива: + + use Illuminate\Support\Arr; + + $array = [0, null]; + + $filtered = Arr::whereNotNull($array); + + // [0 => 0] + #### `Arr::wrap()` @@ -1563,6 +1578,18 @@ Laravel содержит множество глобальных «вспомо // the quick brown fox jumps over a lazy dog + + +#### `Str::reverse()` + +Метод `Str::reverse` переворачивает переданную строку: + + use Illuminate\Support\Str; + + $reversed = Str::reverse('Hello World'); + + // dlroW olleH + #### `Str::singular()` diff --git a/docs/homestead.md b/docs/homestead.md index 9a77975..20a4630 100644 --- a/docs/homestead.md +++ b/docs/homestead.md @@ -36,7 +36,7 @@ ## Введение -Laravel стремится сделать весь процесс разработки на PHP приятным, и ваша локальная среда разработки не является исключением. Laravel Homestead – это официальный предварительно упакованный образ Vagrant, который обеспечит окружение без требований установки PHP, веб-сервера и любого другого серверного программного обеспечения на вашем локальном компьютере. +Laravel стремится сделать весь процесс разработки на PHP приятным, и ваша локальная среда разработки не является исключением. [Laravel Homestead](https://github.com/laravel/homestead) – это официальный предварительно упакованный образ Vagrant, который обеспечит окружение без требований установки PHP, веб-сервера и любого другого серверного программного обеспечения на вашем локальном компьютере. [Vagrant](https://www.vagrantup.com) предлагает простой и элегантный способ подготовки и управления виртуальными машинами. Образы Vagrant полностью «одноразовые». Если что-то пойдет не так, вы можете уничтожить и воссоздать образ за считанные минуты! @@ -58,6 +58,7 @@ Homestead работает в любой системе: Windows, macOS или L - Ubuntu 20.04 - Git +- PHP 8.1 - PHP 8.0 - PHP 7.4 - PHP 7.3 @@ -503,7 +504,7 @@ sites: ### Версии PHP -В Homestead 6 появилась поддержка запуска нескольких версий PHP на одной виртуальной машине. Вы можете указать, какую версию PHP использовать для конкретного сайта в файле `Homestead.yaml`. Доступные версии PHP: «5.6», «7.0», «7.1», «7.2», «7.3», «7.4» и «8.0» (по умолчанию): +В Homestead 6 появилась поддержка запуска нескольких версий PHP на одной виртуальной машине. Вы можете указать, какую версию PHP использовать для конкретного сайта в файле `Homestead.yaml`. Доступные версии PHP: «5.6», «7.0», «7.1», «7.2», «7.3», «7.4», «8.0» (по умолчанию) и «8.1»: sites: - map: homestead.test @@ -519,6 +520,7 @@ sites: php7.3 artisan list php7.4 artisan list php8.0 artisan list + php8.1 artisan list Вы можете изменить версию PHP, используемую по умолчанию в CLI, выполнив следующие команды на своей виртуальной машине Homestead: @@ -529,6 +531,7 @@ sites: php73 php74 php80 + php81 ### Подключение к базам данных diff --git a/docs/horizon.md b/docs/horizon.md index a469182..d4a58fd 100644 --- a/docs/horizon.md +++ b/docs/horizon.md @@ -19,7 +19,7 @@ > {tip} Прежде чем углубиться в Laravel Horizon, вам следует ознакомиться с базовыми [службами очередей](queues.md) Laravel. Horizon дополняет очередь Laravel дополнительным функционалом, которые могут сбивать с толку, если вы еще не знакомы с основным функционалом очереди, предлагаемыми Laravel. -Laravel Horizon предлагает красивую панель управления и конфигурацию на основе кода для ваших [очередей Redis](queues.md), работающих на Laravel. Horizon позволяет легко отслеживать ключевые показатели вашей системы очередей, такие как пропускная способность, время выполнения и сбои заданий. +[Laravel Horizon](https://github.com/laravel/horizon) предлагает красивую панель управления и конфигурацию на основе кода для ваших [очередей Redis](queues.md), работающих на Laravel. Horizon позволяет легко отслеживать ключевые показатели вашей системы очередей, такие как пропускная способность, время выполнения и сбои заданий. При использовании Horizon вся ваша конфигурация обработчика очереди хранится в одном простом файле конфигурации. Определив конфигурацию обработчиков вашего приложения в файле с контролем версий, вы можете легко масштабировать или изменять обработчики очереди вашего приложения при развертывании приложения. @@ -43,6 +43,8 @@ Laravel Horizon предлагает красивую панель управл После публикации ресурсов Horizon его основной конфигурационный файл будет расположен по адресу `config/horizon.php`. Этот конфигурационный файл позволяет вам настроить параметры обработчика очереди для вашего приложения. Каждый параметр конфигурации включает описание своего назначения, поэтому обязательно внимательно изучите этот файл. +> {note} Horizon внутренне использует соединение Redis с именем `horizon`. Данное имя соединения Redis зарезервировано и не должно назначаться другому соединению Redis в конфигурационном файле `database.php` или в качестве значения параметра `use` в конфигурационном файле `horizon.php`. + #### Окружение diff --git a/docs/installation.md b/docs/installation.md index 407acca..a6bc3c1 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -269,3 +269,5 @@ Laravel может служить клиент-серверным фреймво Laravel также может служить серверной частью API для одностраничного JavaScript-приложения или мобильного приложения. Например, вы можете использовать Laravel в качестве серверной части API для своего [Next.js](https://nextjs.org) приложения. В этом контексте вы можете использовать Laravel для обеспечения [аутентификации](sanctum.md) и хранения / получения данных для вашего приложения, а также пользуясь преимуществами мощных служб Laravel, таких как очереди, электронная почта, уведомления и многое другое. Если вы планируете использовать Laravel именно так, то вы можете ознакомиться с нашей документацией по [маршрутизации](routing.md), пакету [Laravel Sanctum](sanctum.md) и [Eloquent ORM](eloquent.md). + +> {tip} Вы хотите создать бэкэнд на Laravel и интерфейс на Next.js? Laravel Breeze предлагает [стек API](starter-kits.md#breeze-and-next), а также [реализацию внешнего интерфейса Next.js](https://github.com/laravel/breeze-next ), чтобы вы могли начать работу за считанные минуты. diff --git a/docs/migrations.md b/docs/migrations.md index 494cb1e..b6c3c7e 100644 --- a/docs/migrations.md +++ b/docs/migrations.md @@ -322,6 +322,14 @@ Laravel будет использовать имя миграции, чтобы #collection-method-list a { display: block; } + + .collection-method code { + font-size: 14px; + } + + .collection-method:not(.first-collection-method) { + margin-top: 50px; + } --> @@ -867,6 +875,7 @@ Laravel будет использовать имя миграции, чтобы `->default($value)` | Указать значение «по умолчанию» для столбца. `->first()` | Поместить столбец «первым» в таблице (MySQL). `->from($integer)` | Установить начальное значение автоинкрементного поля (MySQL / PostgreSQL). +`->invisible()` | Сделать столбец «невидимым» для `SELECT *`-запросов (MySQL). `->nullable($value = true)` | Позволить (по умолчанию) значения NULL для вставки в столбец. `->storedAs($expression)` | Создать сохраненный генерируемый столбец (MySQL / PostgreSQL). `->unsigned()` | Установить столбцы INTEGER как UNSIGNED (MySQL). @@ -1039,8 +1048,10 @@ Laravel содержит несколько удобных методов, св `$table->primary('id');` | Добавить первичный ключ. `$table->primary(['id', 'parent_id']);` | Добавить составной ключ. `$table->unique('email');` | Добавить уникальный индекс. -`$table->index('state');` | Добавляет простой индекс. -`$table->spatialIndex('location');` | Добавляет пространственный индекс (кроме SQLite). +`$table->index('state');` | Добавить простой индекс. +`$table->fulltext('body');` | Добавить полнотекстовый индекс (MySQL/PostgreSQL). +`$table->fulltext('body')->language('english');` | Добавить полнотекстовый индекс для указанного языка (PostgreSQL). +`$table->spatialIndex('location');` | Добавить пространственный индекс (кроме SQLite). #### Длина индекса и MySQL / MariaDB diff --git a/docs/mix.md b/docs/mix.md index 781ea0c..c7b3df8 100644 --- a/docs/mix.md +++ b/docs/mix.md @@ -94,10 +94,10 @@ Webpack может не обнаруживать изменения ваших npx tailwindcss init -Команда `init` сгенерирует файл `tailwind.config.js`. В этом файле вы можете настроить пути ко всем шаблонам вашего приложения и JavaScript, чтобы Tailwind мог очистить неиспользуемые стили при оптимизации CSS для эксплуатационного окружения: +Команда `init` сгенерирует файл `tailwind.config.js`. Раздел `content` этого файла позволяет вам настроить пути ко всем вашим шаблонам HTML, компонентам JavaScript и любым другим исходным файлам, которые содержат имена классов Tailwind, чтобы их можно было очистить: ```js -purge: [ +content: [ './storage/framework/views/*.php', './resources/**/*.blade.php', './resources/**/*.js', diff --git a/docs/notifications.md b/docs/notifications.md index a28306a..f75ac86 100644 --- a/docs/notifications.md +++ b/docs/notifications.md @@ -831,7 +831,7 @@ ### Прослушивание транслируемых уведомлений -Уведомления будут транслироваться по частному каналу, в формате с использованием соглашения `{notifiable}.{id}`. Итак, если вы отправляете уведомление экземпляру `App\Models\User` с идентификатором `1`, то уведомление будет транслироваться по частному каналу `App.Models.User.1`. При использовании [Laravel Echo](broadcasting.md) вы можете легко прослушивать уведомления канала, используя метод `notification`: +Уведомления будут транслироваться по частному каналу, в формате с использованием соглашения `{notifiable}.{id}`. Итак, если вы отправляете уведомление экземпляру `App\Models\User` с идентификатором `1`, то уведомление будет транслироваться по частному каналу `App.Models.User.1`. При использовании [Laravel Echo](broadcasting.md#client-side-installation) вы можете легко прослушивать уведомления канала, используя метод `notification`: Echo.private('App.Models.User.' + userId) .notification((notification) => { @@ -1306,7 +1306,7 @@ Laravel предлагает несколько каналов уведомле ## Introduction -Laravel Octane supercharges your application's performance by serving your application using high-powered application servers, including [Swoole](https://swoole.co.uk) and [RoadRunner](https://roadrunner.dev). Octane boots your application once, keeps it in memory, and then feeds it requests at supersonic speeds. +[Laravel Octane](https://github.com/laravel/octane) supercharges your application's performance by serving your application using high-powered application servers, including [Open Swoole](https://swoole.co.uk), [Swoole](https://github.com/swoole/swoole-src), and [RoadRunner](https://roadrunner.dev). Octane boots your application once, keeps it in memory, and then feeds it requests at supersonic speeds. ## Installation @@ -125,6 +125,20 @@ Finally, build your Sail images: ./vendor/bin/sail build --no-cache ``` + +#### Swoole Configuration + +Swoole supports a few additional configuration options that you may add to your `octane` configuration file if necessary. Because they rarely need to be modified, these options are not included in the default configuration file: + +```php +'swoole' => [ + 'options' => [ + 'log_file' => storage_path('logs/swoole_http.log'), + 'package_max_length' => 10 * 1024 * 1024, + ], +]; +``` + ## Serving Your Application diff --git a/docs/passport.md b/docs/passport.md index d180402..e4b1ae1 100644 --- a/docs/passport.md +++ b/docs/passport.md @@ -46,7 +46,7 @@ ## Introduction -Laravel Passport provides a full OAuth2 server implementation for your Laravel application in a matter of minutes. Passport is built on top of the [League OAuth2 server](https://github.com/thephpleague/oauth2-server) that is maintained by Andy Millington and Simon Hamp. +[Laravel Passport](https://github.com/laravel/passport) provides a full OAuth2 server implementation for your Laravel application in a matter of minutes. Passport is built on top of the [League OAuth2 server](https://github.com/thephpleague/oauth2-server) that is maintained by Andy Millington and Simon Hamp. > {note} This documentation assumes you are already familiar with OAuth2. If you do not know anything about OAuth2, consider familiarizing yourself with the general [terminology](https://oauth2.thephpleague.com/terminology/) and features of OAuth2 before continuing. @@ -74,7 +74,7 @@ Next, you should execute the `passport:install` Artisan command. This command wi > {tip} If you would like to use UUIDs as the primary key value of the Passport `Client` model instead of auto-incrementing integers, please install Passport using [the `uuids` option](#client-uuids). -After running the `passport:install` command, add the `Laravel\Passport\HasApiTokens` trait to your `App\Models\User` model. This trait will provide a few helper methods to your model which allow you to inspect the authenticated user's token and scopes: +After running the `passport:install` command, add the `Laravel\Passport\HasApiTokens` trait to your `App\Models\User` model. This trait will provide a few helper methods to your model which allow you to inspect the authenticated user's token and scopes. If your model is already using the `Laravel\Sanctum\HasApiTokens` trait, you may remove that trait: middleware('auth:api'); +> {note} If you are using the [client credentials grant](#client-credentials-grant-tokens), you should use [the `client` middleware](#client-credentials-grant-tokens) to protect your routes instead of the `auth:api` middleware. + #### Multiple Authentication Guards diff --git a/docs/queries.md b/docs/queries.md index 4a21fc5..d789bf9 100644 --- a/docs/queries.md +++ b/docs/queries.md @@ -168,7 +168,7 @@ DB::table('users')->orderBy('id')->lazy()->each(function ($user) { }); ``` -Еще раз, если вы планируете обновлять полученные записи во время их итерации, лучше вместо этого использовать метод `lazyById`. Этот метод автоматически разбивает результаты «постранично» на основе первичного ключа записи: +Еще раз, если вы планируете обновлять полученные записи во время их итерации, лучше вместо этого использовать методы `lazyById` / `lazyByIdDesc`. Эти методы автоматически разбивает результаты «постранично» на основе первичного ключа записи: ```php DB::table('users')->where('active', false) diff --git a/docs/redis.md b/docs/redis.md index 6568c43..965fae5 100644 --- a/docs/redis.md +++ b/docs/redis.md @@ -132,7 +132,7 @@ composer require predis/predis 'client' => env('REDIS_CLIENT', 'predis'), - // Остальная часть конфигурации Redis ... + // ], Помимо основных параметров конфигурации сервера `host`, `port`, `database` и `password`, Predis поддерживает дополнительные [параметры подключения](https://github.com/nrk/predis/wiki/Connection-Parameters), которые могут быть определены для каждого из ваших серверов Redis. Чтобы использовать эти дополнительные параметры конфигурации, добавьте их в конфигурацию сервера Redis в конфигурационном файле `config/database.php` вашего приложения: diff --git a/docs/sail.md b/docs/sail.md index 6563d6e..4eb9e4b 100644 --- a/docs/sail.md +++ b/docs/sail.md @@ -29,9 +29,9 @@ ## Введение -Laravel Sail – это легкий интерфейс командной строки для взаимодействия со средой разработки Docker для Laravel. Sail обеспечивает отличную отправную точку для создания приложения Laravel с использованием PHP, MySQL и Redis без предварительного опыта работы с Docker. +[Laravel Sail](https://github.com/laravel/sail) – это легкий интерфейс командной строки для взаимодействия со средой разработки Docker для Laravel. Sail обеспечивает отличную отправную точку для создания приложения Laravel с использованием PHP, MySQL и Redis без предварительного опыта работы с Docker. -По сути, Sail - это файл `docker-compose.yml` и сценарий `sail`, который хранится в корне вашего проекта. Сценарий `sail` предоставляет интерфейс командной строки с удобными методами для взаимодействия с контейнерами Docker, определенными файлом `docker-compose.yml`. +По сути, Sail – это файл `docker-compose.yml` и сценарий `sail`, который хранится в корне вашего проекта. Сценарий `sail` предоставляет интерфейс командной строки с удобными методами для взаимодействия с контейнерами Docker, определенными файлом `docker-compose.yml`. Laravel Sail поддерживается в macOS, Linux и Windows (через [WSL2](https://docs.microsoft.com/en-us/windows/wsl/about)). @@ -146,7 +146,7 @@ sail composer require laravel/sanctum #### Установка зависимостей Composer для существующих приложений -Существует вероятность, что при разработке в команде, вы не будете являться создателем приложения на Laravel. Следовательно, что ни одна из зависимостей Composer в приложении, включая рассматриваемый Sail, не будет установлена ​​после клонирования репозитория приложения на локальный компьютер. +Существует вероятность, что при разработке в команде, вы не будете являться создателем приложения на Laravel. Следовательно, что ни одна из зависимостей Composer в приложении, включая рассматриваемый Sail, не будет установлена после клонирования репозитория приложения на локальный компьютер. Вы можете установить зависимости приложения, перейдя в каталог приложения и выполнив следующую команду. Эта команда использует небольшой контейнер Docker, содержащий PHP и Composer, для установки зависимостей приложения: @@ -155,10 +155,12 @@ docker run --rm \ -u "$(id -u):$(id -g)" \ -v $(pwd):/var/www/html \ -w /var/www/html \ - laravelsail/php80-composer:latest \ + laravelsail/php81-composer:latest \ composer install --ignore-platform-reqs ``` +При использовании образа `laravelsail/phpXX-composer` вам следует использовать ту же версию PHP, которую вы планируете использовать для своего приложения (`74`, `80` или `81`). + ### Выполнение команд Artisan @@ -262,6 +264,20 @@ depends_on: sail dusk + +#### Selenium на Apple Silicon + +Если ваш локальный компьютер содержит микросхему Apple Silicon, то ваша служба `selenium` должна использовать образ `seleniarm/standalone-chromium`: + +```yaml +selenium: + image: 'seleniarm/standalone-chromium' + volumes: + - '/dev/shm:/dev/shm' + networks: + - sail +``` + ## Предварительный просмотр писем @@ -387,6 +403,8 @@ sail debug migrate Если вы используете PhpStorm, то просмотрите документацию JetBrain относительно [отладки с нулевой конфигурацией](https://www.jetbrains.com/help/phpstorm/zero-configuration-debugging.html). +> {note} Laravel Sail полагается на `artisan serve` для обслуживания вашего приложения. Команда `artisan serve` принимает только переменные `XDEBUG_CONFIG` и `XDEBUG_MODE` начиная с версии Laravel 8.53.0. Старые версии Laravel (8.52.0 и ниже) не поддерживают эти переменные и не принимают отладочные соединения. + ## Изменение конфигурационных файлов Docker @@ -396,7 +414,7 @@ sail debug migrate sail artisan sail:publish ``` -После выполнения этой команды файлы Docker и другие конфигурационные файлы, используемые Laravel Sail, будут помещены в каталог `docker` корневого каталога вашего приложения. После настройки Sail вы можете изменить имя образа для службы `laravel.test` в файле `docker-compose.yml` вашего приложения. После этого перестройте контейнеры вашего приложения с помощью команды `build`. Присвоение уникального имени образу службы `laravel.test` особенно важно, если вы используете Sail для разработки нескольких приложений Laravel на одной машине: +После запуска этой команды файлы Docker и другие конфигурационные файлы, используемые Laravel Sail, будут помещены в каталог `docker` корневого каталога вашего приложения. После настройки Sail вы можете изменить имя образа для контейнера приложения в файле `docker-compose.yml` вашего приложения. После этого пересоберите контейнеры вашего приложения с помощью команды `build`. Присвоение уникального имени образу приложения особенно важно, если вы используете Sail для разработки нескольких приложений Laravel на одном компьютере: ```bash sail build --no-cache diff --git a/docs/sanctum.md b/docs/sanctum.md index e5d2756..c0ac8ef 100644 --- a/docs/sanctum.md +++ b/docs/sanctum.md @@ -24,7 +24,7 @@ ## Введение -Laravel Sanctum предлагает легковесную систему аутентификации для SPA (одностраничных приложений), мобильных приложений и простых API на основе токенов. Sanctum позволяет каждому пользователю вашего приложения создавать несколько токенов API для своей учетной записи. Этим токенам могут быть предоставлены полномочия / области, которые определяют, какие действия токенам разрешено выполнять. +[Laravel Sanctum](https://github.com/laravel/sanctum) предлагает легковесную систему аутентификации для SPA (одностраничных приложений), мобильных приложений и простых API на основе токенов. Sanctum позволяет каждому пользователю вашего приложения создавать несколько токенов API для своей учетной записи. Этим токенам могут быть предоставлены полномочия / области, которые определяют, какие действия токенам разрешено выполнять. ### Как это работает @@ -229,6 +229,7 @@ Sanctum также обеспечивает простой метод аутен > {note} Для аутентификации ваш SPA и API должны использовать один и тот же домен верхнего уровня, но они могут быть размещены на разных поддоменах. Кроме того, вы должны убедиться, что вы отправили заголовок `Accept: application/json` с вашим запросом. + ### Конфигурирование SPA @@ -308,7 +309,7 @@ Sanctum также обеспечивает простой метод аутен Broadcast::routes(['middleware' => ['auth:sanctum']]); -Затем, чтобы запросы авторизации Pusher были успешными, вам нужно будет предоставить определение `authorizer` Pusher при инициализации [Laravel Echo](broadcasting.md#installing-laravel-echo). Это позволит вашему приложению настроить Pusher для использования экземпляра `axios`, [ориентированного на междоменные запросы](#cors-and-cookies): +Затем, чтобы запросы авторизации Pusher были успешными, вам нужно будет предоставить определение `authorizer` Pusher при инициализации [Laravel Echo](broadcasting.md#client-side-installation). Это позволит вашему приложению настроить Pusher для использования экземпляра `axios`, [ориентированного на междоменные запросы](#cors-and-cookies): window.Echo = new Echo({ broadcaster: "pusher", diff --git a/docs/scout.md b/docs/scout.md index 15769dd..a548772 100644 --- a/docs/scout.md +++ b/docs/scout.md @@ -28,7 +28,7 @@ ## Введение -Laravel Scout предлагает простое решение на основе драйверов для добавления полнотекстового поиска вашим [моделям Eloquent](eloquent.md). Используя наблюдателей моделей, Scout будет автоматически синхронизировать ваши поисковые индексы с вашими записями Eloquent. +[Laravel Scout](https://github.com/laravel/scout) предлагает простое решение на основе драйверов для добавления полнотекстового поиска вашим [моделям Eloquent](eloquent.md). Используя наблюдателей моделей, Scout будет автоматически синхронизировать ваши поисковые индексы с вашими записями Eloquent. В настоящее время Scout поставляется с драйверами [Algolia](https://www.algolia.com/) и [MeiliSearch](https://www.meilisearch.com). Кроме того, Scout включает в себя драйвер `collection`, предназначенный для использования при локальной разработке и не требующий каких-либо внешних зависимостей или сторонних сервисов. Более того, написать свой собственный драйвер просто, и вы можете расширить Scout собственной реализацией поиска. diff --git a/docs/starter-kits.md b/docs/starter-kits.md index 82c63fe..3d98098 100644 --- a/docs/starter-kits.md +++ b/docs/starter-kits.md @@ -4,6 +4,7 @@ - [Laravel Breeze](#laravel-breeze) - [Установка](#laravel-breeze-installation) - [Breeze и Inertia](#breeze-and-inertia) + - [Breeze и Next.js / API](#breeze-and-next) - [Laravel Jetstream](#laravel-jetstream) @@ -16,7 +17,7 @@ ## Laravel Breeze -**Laravel Breeze** – это минимальная и простая реализация всего [функционала аутентификации](authentication.md) Laravel, включая вход в систему, регистрацию, сброс пароля, подтверждение адреса электронной почты и пароля. Слой «View» комплекта Laravel Breeze по умолчанию состоит из простых [шаблонов Blade](blade.md), стилизованных с помощью [Tailwind CSS](https://tailwindcss.com). +[Laravel Breeze](https://github.com/laravel/breeze) – это минимальная и простая реализация всего [функционала аутентификации](authentication.md) Laravel, включая вход в систему, регистрацию, сброс пароля, подтверждение адреса электронной почты и пароля. Слой «View» комплекта Laravel Breeze по умолчанию состоит из простых [шаблонов Blade](blade.md), стилизованных с помощью [Tailwind CSS](https://tailwindcss.com). Breeze является прекрасной отправной точкой для создания нового приложения Laravel, а также отличный выбор для проектов, которые планируют вывести использование шаблонов Blade на новый уровень с помощью [Laravel Livewire](https://laravel-livewire.com). @@ -70,6 +71,23 @@ npm run dev php artisan migrate ``` + +### Breeze и Next.js / API + +Laravel Breeze также может создать API-интерфейс аутентификации, готовый для аутентификации современных приложений JavaScript, например, на базе [Next](https://nextjs.org), [Nuxt](https://nuxtjs.org) и других. Для начала укажите стек `api` в качестве желаемого при выполнении команды `breeze:install` Artisan: + +```nothing +php artisan breeze:install api +php artisan migrate +``` + +Во время установки Breeze добавит переменную среды `FRONTEND_URL` в файл `.env` вашего приложения. Этот URL-адрес должен быть URL-адресом вашего приложения JavaScript. Обычно во время локальной разработки этим адресом будет `http://localhost:3000`. + + +#### Доступная реализация Next.js + +Теперь вы будете готовы совместить указанный выше бэкэнд с выбранным вами интерфейсом. Реализация Next внешнего интерфейса Breeze доступна на [GitHub](https://github.com/laravel/breeze-next). Этот интерфейс поддерживается Laravel и содержит тот же пользовательский интерфейс, что и традиционные стеки Blade и Inertia, предоставляемые Breeze. + ## Laravel Jetstream diff --git a/docs/telescope.md b/docs/telescope.md index 4eaa882..c040039 100644 --- a/docs/telescope.md +++ b/docs/telescope.md @@ -35,7 +35,7 @@ ## Введение -Telescope станет прекрасным помощником при локальной разработке приложения Laravel. Telescope дает представление о запросах, поступающих в ваше приложение, исключениях, записях журнала, запросах базы данных, поставленных в очередь заданиях, почте, уведомлениях, операциях кэша, запланированных задачах, дампах переменных и о многом другом. +[Laravel Telescope](https://github.com/laravel/telescope) станет прекрасным помощником при локальной разработке приложения Laravel. Telescope дает представление о запросах, поступающих в ваше приложение, исключениях, записях журнала, запросах базы данных, поставленных в очередь заданиях, почте, уведомлениях, операциях кэша, запланированных задачах, дампах переменных и о многом другом. diff --git a/docs/valet.md b/docs/valet.md index d947b8e..c8b1fc3 100644 --- a/docs/valet.md +++ b/docs/valet.md @@ -22,7 +22,7 @@ ## Introduction -Valet is a Laravel development environment for macOS minimalists. Laravel Valet configures your Mac to always run [Nginx](https://www.nginx.com/) in the background when your machine starts. Then, using [DnsMasq](https://en.wikipedia.org/wiki/Dnsmasq), Valet proxies all requests on the `*.test` domain to point to sites installed on your local machine. +[Laravel Valet](https://github.com/laravel/valet) is a development environment for macOS minimalists. Laravel Valet configures your Mac to always run [Nginx](https://www.nginx.com/) in the background when your machine starts. Then, using [DnsMasq](https://en.wikipedia.org/wiki/Dnsmasq), Valet proxies all requests on the `*.test` domain to point to sites installed on your local machine. In other words, Valet is a blazing fast Laravel development environment that uses roughly 7 MB of RAM. Valet isn't a complete replacement for [Sail](/docs/{{version}}/sail) or [Homestead](/docs/{{version}}/homestead), but provides a great alternative if you want flexible basics, prefer extreme speed, or are working on a machine with a limited amount of RAM.