Skip to content

Commit

Permalink
[compare] 6582c3d...26ddf9b
Browse files Browse the repository at this point in the history
Черновик
Update broadcasting.md
Добавит недостающие файлы
Update cache.md
Update collections.md
Update configuration.md
Update console-tests.md
Update container.md
Update contributions.md
Update controllers.md
Update database-testing.md
Update database.md
Update deployment.md
Update dusk.md
Update eloquent-factories.md
Update eloquent-mutators.md
Update eloquent-relationships.md
Update eloquent-resources.md
Update eloquent-serialization.md
Update eloquent.md
Update facades.md
Update filesystem.md
Update fortify.md
  • Loading branch information
russsiq committed Jan 27, 2023
1 parent c40f9fd commit 26eda8e
Show file tree
Hide file tree
Showing 80 changed files with 3,715 additions and 1,143 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
- [x] [Установка](./docs/installation.md)
- [x] [Конфигурирование](./docs/configuration.md)
- [x] [Структура каталогов](./docs/structure.md)
- [ ] [Внешний интерфейс приложения](./docs/frontend.md)
- [x] [Стартовые комплекты](./docs/starter-kits.md)
- [x] [Развертывание](./docs/deployment.md)
- #### Архитектурные концепции
Expand All @@ -35,6 +36,7 @@
- [x] [HTTP-ответы](./docs/responses.md)
- [x] [HTML-шаблоны](./docs/views.md)
- [x] [Шаблонизатор Blade](./docs/blade.md)
- [ ] [Объединение веб-активов](./docs/vite.md)
- [x] [Генерация URL-адресов](./docs/urls.md)
- [x] [Сессия HTTP](./docs/session.md)
- [x] [Валидация](./docs/validation.md)
Expand All @@ -45,7 +47,6 @@
- [x] [Трансляция событий](./docs/broadcasting.md)
- [x] [Кеш приложения](./docs/cache.md)
- [x] [Коллекции](./docs/collections.md)
- [x] [Компиляция веб-активов с помощью Mix](./docs/mix.md)
- [x] [Контракты](./docs/contracts.md)
- [x] [События](./docs/events.md)
- [x] [Файловое хранилище](./docs/filesystem.md)
Expand Down Expand Up @@ -79,6 +80,7 @@
- [x] [Мутаторы и типизация](./docs/eloquent-mutators.md)
- [x] [Ресурсы API](./docs/eloquent-resources.md)
- [x] [Сериализация](./docs/eloquent-serialization.md)
- [ ] [Фабрики](./docs/eloquent-factories.md)
- #### Тестирование
- [x] [Начало работы](./docs/testing.md)
- [x] [Тесты HTTP](./docs/http-tests.md)
Expand All @@ -96,8 +98,10 @@
- [x] [*Homestead*](./docs/homestead.md) – официальный образ Vagrant для приложений Laravel.
- [x] [*Horizon*](./docs/horizon.md) – панель управления и конфигурация очередей, использующих Redis.
- [ ] [*Jetstream*](https://jetstream.laravel.com) – красиво оформленный каркас приложений. Включает в себя Fortify и Sanctum.
- [x] [*Mix*](./docs/mix.md) – гибкий API для определения шагов сборки Webpack; упрощает компиляцию и минимизацию файлов CSS и JavaScript.
- [ ] [*Octane*](./docs/octane.md) – повышает производительность вашего приложения с использованием мощных серверов [Swoole](https://swoole.co.uk) и [RoadRunner](https://roadrunner.dev)
- [ ] [*Passport*](./docs/passport.md) – реализация сервера OAuth2 для вашего приложения Laravel на основе [League OAuth2](https://github.com/thephpleague/oauth2-server).
- [ ] [*Pint*](./docs/pint.md) – is an opinionated PHP code style fixer for minimalists.
- [x] [*Sail*](./docs/sail.md) – CLI для взаимодействия со средой разработки Docker.
- [x] [*Sanctum*](./docs/sanctum.md) – легковесная система аутентификации для SPA (одностраничных приложений), мобильных приложений и простых API на основе токенов. Управление токенами API, аутентификация сессии. Не содержит никаких шаблонов. Используется в Laravel Jetstream.
- [x] [*Scout*](./docs/scout.md) – «простое» решение на основе драйверов для добавления полнотекстового поиска моделям Eloquent.
Expand Down
108 changes: 72 additions & 36 deletions docs/artisan.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- [Генерация команд](#generating-commands)
- [Структура команды](#command-structure)
- [Анонимные команды](#closure-commands)
- [Изолируемые команды](#isolatable-commands)
- [Определение вводимых данных](#defining-input-expectations)
- [Аргументы](#arguments)
- [Параметры](#options)
Expand Down Expand Up @@ -60,7 +61,8 @@ Laravel Tinker – это мощный REPL для фреймворка Laravel,
composer require laravel/tinker
```

> {tip} Ищете графический интерфейс для взаимодействия с приложением Laravel? Зацените [Tinkerwell](https://tinkerwell.app)!
> **Примечание**\
> Ищете графический интерфейс для взаимодействия с приложением Laravel? Зацените [Tinkerwell](https://tinkerwell.app)!
<a name="usage"></a>
#### Использование
Expand All @@ -77,7 +79,8 @@ php artisan tinker
php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"
```

> {note} Глобальный помощник `dispatch` и метод `dispatch` класса `Dispatchable` зависят от "garbage collection" для помещения задания в очередь. Следовательно, при использовании Tinker вы должны использовать `Bus::dispatch` или `Queue::push` для отправки заданий.
> **Предупреждение**\
> Глобальный помощник `dispatch` и метод `dispatch` класса `Dispatchable` зависят от "garbage collection" для помещения задания в очередь. Следовательно, при использовании Tinker вы должны использовать `Bus::dispatch` или `Queue::push` для отправки заданий.
<a name="command-allow-list"></a>
#### Список разрешенных команд
Expand Down Expand Up @@ -154,7 +157,8 @@ php artisan make:command SendEmails
}
}

> {tip} Хорошей практикой повторного использования кода считается создание «простых» консольных команд с делегированием своих задач службам приложения. В приведенном примере мы внедряем класс службы для выполнения «затратной» отправки электронных писем.
> **Примечание**\
> Хорошей практикой повторного использования кода считается создание «простых» консольных команд с делегированием своих задач службам приложения. В приведенном примере мы внедряем класс службы для выполнения «затратной» отправки электронных писем.
<a name="closure-commands"></a>
### Анонимные команды
Expand Down Expand Up @@ -200,6 +204,55 @@ php artisan make:command SendEmails
// ...
})->purpose('Send a marketing email to a user');

<a name="isolatable-commands"></a>
### Изолируемые команды

> **Предупреждение**\
> Чтобы использовать этот функционал, ваше приложение должно использовать в качестве драйвера кеша по умолчанию `memcached`, `redis`, `dynamodb`, `database`, `file`, `array`. Кроме того, все серверы должны обмениваться данными с одним и тем же сервером центрального кэша.
Иногда необходимо гарантировать, что только один экземпляр команды может выполняться одновременно. Для этого вы можете реализовать интерфейс `Illuminate\Contracts\Console\Isolatable` в своем классе команд:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Isolatable;

class SendEmails extends Command implements Isolatable
{
// ...
}

Когда команда помечена как `Isolatable`, Laravel автоматически добавит к команде параметр `--isolated`. Когда команда вызывается с этим параметром, то Laravel гарантирует, что никакие другие экземпляры этой команды еще не запущены. Laravel достигает этого, пытаясь получить атомарную блокировку, используя драйвер кеша вашего приложения по умолчанию. Если запущены другие экземпляры команды, то команда не будет выполняться; однако, команда все равно завершится с успешным кодом выхода:

```shell
php artisan mail:send 1 --isolated
```

Если вы хотите указать код состояния выхода, который должна возвращать команда, если она не может быть выполнена, то вы можете указать желаемый код состояния с помощью опции `isolated`:

```shell
php artisan mail:send 1 --isolated=12
```

<a name="lock-expiration-time"></a>
#### Время действия блокировки

По умолчанию время действия изоляционных блокировок истекает после завершения команды. Или, если команда прервана и не может быть завершена, блокировка истечет через один час. Однако вы можете настроить время истечения блокировки, определив метод `isolationLockExpiresAt` в вашей команде:

```php
/**
* Определить, когда истечет время действия блокировки изоляции команды.
*
* @return \DateTimeInterface|\DateInterval
*/
public function isolationLockExpiresAt()
{
return now()->addMinutes(5);
}
```

<a name="defining-input-expectations"></a>
## Определение вводимых данных

Expand Down Expand Up @@ -495,7 +548,8 @@ php artisan mail:send --id=1 --id=2

$bar->finish();

> {tip} Для получения дополнительной информации ознакомьтесь с [разделом документации компонента Symfony Progress Bar](https://symfony.com/doc/current/components/console/helpers/progressbar.html).
> **Примечание**\
> Для получения дополнительной информации ознакомьтесь с [разделом документации компонента Symfony Progress Bar](https://symfony.com/doc/current/components/console/helpers/progressbar.html).
<a name="registering-commands"></a>
## Регистрация команд
Expand Down Expand Up @@ -611,47 +665,29 @@ php artisan mail:send --id=1 --id=2
<a name="signal-handling"></a>
## Обработка сигналов

Компонент Symfony Console, на котором работает консоль Artisan, позволяет вам указать, какие [сигналы процесса](https://ru.wikipedia.org/wiki/Сигнал_(Unix)) (если есть) может обрабатывать ваша команда. Например, вы можете указать, что ваша команда может обрабатывать сигналы `SIGINT` и `SIGTERM`.

Для начала вы должны реализовать интерфейс `Symfony\Component\Console\Command\SignalableCommandInterface` в классе своей команды Artisan. Этот интерфейс требует от вас определения двух методов: `getSubscribedSignals` и `handleSignal`:

```php
<?php

use Symfony\Component\Console\Command\SignalableCommandInterface;

class StartServer extends Command implements SignalableCommandInterface
{
// ...

/**
* Получить список сигналов, обрабатываемых командой.
*
* @return array
*/
public function getSubscribedSignals(): array
{
return [SIGINT, SIGTERM];
}
Как вы, возможно, знаете, операционные системы позволяют отправлять сигналы запущенным процессам. Например, сигнал `SIGTERM` — это то, как операционные системы запрашивают завершение программы. Если вы хотите прослушивать сигналы в консольных командах Artisan и выполнять код при их появлении, вы можете использовать метод `trap`:

/**
* Обработка входящего сигнала.
* Выполнить консольную команду.
*
* @param int $signal
* @return void
* @return mixed
*/
public function handleSignal(int $signal): void
public function handle()
{
if ($signal === SIGINT) {
$this->stopServer();
$this->trap(SIGTERM, fn () => $this->shouldKeepRunning = false);

return;
while ($this->shouldKeepRunning) {
// ...
}
}
}
```

Метод `getSubscribedSignals` должен возвращать массив сигналов, которые может обработать ваша команда, в то время как метод `handleSignal` принимает сигнал и может реагировать на него в соответствии с определенной вами логикой.
Чтобы прослушивать несколько сигналов одновременно, вы можете передать массив сигналов методу `trap`:

$this->trap([SIGTERM, SIGQUIT], function ($signal) {
$this->shouldKeepRunning = false;

dump($signal); // SIGTERM / SIGQUIT
});

<a name="stub-customization"></a>
## Настройка заготовок
Expand Down
Loading

0 comments on commit 26eda8e

Please sign in to comment.