Laravel framework russian community

Введение

Laravel Fortify – это независимая от внешнего интерфейса серверная реализация аутентификации для Laravel. Fortify регистрирует маршруты и контроллеры, необходимые для реализации всего функционала аутентификации Laravel, включая вход в систему, регистрацию, сброс пароля, подтверждение электронной почты и многое другое. После установки Fortify вы можете запустить команду Artisan, чтобы просмотреть маршруты, зарегистрированные Fortify.

Поскольку Fortify не обеспечен собственным пользовательским интерфейсом, он предназначен для работы в паре с вашим собственным пользовательским интерфейсом, который отправляет запросы на регистрируемые им маршруты. Мы обсудим, как именно делать запросы к этим маршрутам, в оставшейся части этой документации.

Что такое Fortify?

Как упоминалось ранее, Laravel Fortify – это независимая от внешнего интерфейса серверная реализация аутентификации для Laravel. Fortify регистрирует маршруты и контроллеры, необходимые для реализации всего функционала аутентификации Laravel, включая вход в систему, регистрацию, сброс пароля, подтверждение электронной почты и многое другое.

Вам не обязательно использовать Fortify, чтобы использовать функционал аутентификации Laravel. Вы всегда можете вручную взаимодействовать со службами аутентификации Laravel, следуя документации: аутентификация, сброс пароля, и подтверждение по электронной почте.

Если вы новичок в Laravel, вы можете изучить стартовый комплект приложения Laravel Breeze, прежде чем пытаться использовать Laravel Fortify. Laravel Breeze предлагает каркас аутентификации для вашего приложения, который включает пользовательский интерфейс, созданный с помощью Tailwind CSS. В отличие от Fortify, Breeze публикует свои маршруты и контроллеры прямо в вашем приложении. Это позволяет вам изучить и освоиться с функционалом аутентификации Laravel, прежде чем позволить Laravel Fortify реализовать этот функционал для вас.

Laravel Fortify по сути берет маршруты и контроллеры Laravel Breeze и предлагает их как пакет, не включающий пользовательский интерфейс. Это позволяет вам по-прежнему быстро строить бэкэнд-реализацию слоя аутентификации вашего приложения, не привязываясь к каким-либо конкретным предпочтениям фронтенда.

Когда я должен использовать Fortify?

Вам может быть интересно, когда уместно использовать Laravel Fortify. Во-первых, если вы используете один из стартовых комплектов Laravel, вам не нужно устанавливать Laravel Fortify, поскольку все стартовые комплекты приложений Laravel уже обеспечивают полную реализацию аутентификации.

Если вы не используете стартовый комплект приложения и вашему приложению требуются функционал аутентификации, у вас есть два варианта: самостоятельно реализовать функционал аутентификации вашего приложения или использовать Laravel Fortify для обеспечения серверной реализации этого функционала.

Если вы выберете установку Fortify, ваш пользовательский интерфейс будет делать запросы к маршрутам аутентификации Fortify, которые подробно описаны в этой документации, для аутентификации и регистрации пользователей.

Если вы решите самостоятельно взаимодействовать со службами аутентификации Laravel вместо использования Fortify, вы можете сделать это, следуя документации: аутентификация, сброс пароля, и подтверждение по электронной почте.

Laravel Fortify и Laravel Sanctum

Некоторых разработчиков смущает разница между Laravel Sanctum и Laravel Fortify. Поскольку эти два пакета решают две разные, но связанные проблемы, Laravel Fortify и Laravel Sanctum не являются взаимоисключающими или конкурирующими пакетами.

Laravel Sanctum занимается только управлением токенами API и аутентификацией существующих пользователей с помощью файлов Cookies сессии или токенов. Sanctum не содержит никаких маршрутов для регистрации пользователей, сброса пароля и т. д.

Если вы пытаетесь самостоятельно создать слой аутентификации для приложения, которое предлагает API или служит серверной частью для одностраничного приложения, вполне возможно, что вы будете использовать оба пакета: Laravel Fortify (для регистрации пользователя, сброса пароля и т. д.) и Laravel Sanctum (управление токенами API, аутентификация сессии).

Введение

Отправка электронной почты не должна быть сложной. Laravel предлагает чистый и простой почтовый API на базе популярной библиотеки SwiftMailer. Laravel и SwiftMailer обеспечены драйверами для отправки электронной почты через SMTP, Mailgun, Postmark, Amazon SES и , что позволяет быстро начать отправку почты через локальный или облачный сервис по вашему выбору.

Конфигурирование

Почтовые службы Laravel могут быть настроены через конфигурационный файл вашего приложения. Каждая почтовая программа, настроенная в этом файле, может иметь свою собственную уникальную конфигурацию и даже свой собственный уникальный «транспорт», что позволяет вашему приложению использовать различные почтовые службы для отправки определенных сообщений электронной почты. Например, ваше приложение может использовать Postmark для отправки транзакционных писем, а Amazon SES – для массовых рассылок.

В конфигурационном файле вы найдете массив . Этот массив содержит образец записи конфигурации для каждого из основных почтовых драйверов / транспортов, поддерживаемых Laravel, в то время как значение конфигурации определяет, какая почтовая программа будет использоваться по умолчанию, когда ваше приложение должно отправить сообщение электронной почты.

Предварительная подготовка драйверов

Драйверы на основе API, такие как Mailgun и Postmark, часто проще в использовании и быстрее, чем отправка почты через SMTP-серверы. По возможности мы рекомендуем использовать один из этих драйверов. Для всех драйверов на основе API требуется HTTP-библиотека Guzzle, которую можно установить через менеджер пакетов Composer:

Драйвер Mailgun

Чтобы использовать драйвер Mailgun, сначала установите HTTP-библиотеку Guzzle. Затем установите параметру в вашем конфигурационном файле значение . Затем убедитесь, что ваш конфигурационный файл содержит следующие параметры:

Если вы не используете США, то вы можете определить конечную точку своего региона в конфигурации файла :

Драйвер Postmark

Чтобы использовать драйвер Postmark, установите транспорт SwiftMailer для Postmark через Composer:

Затем установите HTTP-библиотеку Guzzle и установите для параметра в конфигурационном файле значение . Наконец, убедитесь, что ваш конфигурационный файл содержит следующие параметры:

Если вы хотите указать поток сообщений Postmark, который должен использоваться данной почтовой программой, вы можете добавить параметр конфигурации в массив конфигурации почтовой программы. Этот массив конфигурации можно найти в файле конфигурации вашего приложения :

Таким образом, вы также можете настроить несколько почтовых программ Postmark с разными потоками сообщений.

Драйвер SES

Чтобы использовать драйвер Amazon SES, сначала необходимо установить Amazon AWS SDK для PHP. Вы можете установить эту библиотеку через менеджер пакетов Composer:

Затем установите для параметра в вашем файле конфигурации значение и убедитесь, что конфигурационный файл содержит следующие параметры:

Выполнение команд

При использовании Laravel Sail ваше приложение выполняется в контейнере Docker и изолировано от вашего локального компьютера. При помощи Sail можно запускать различные команды для вашего приложения, такие как произвольные команды PHP, команды Artisan, команды Composer и Node/NPM команды.

При чтении документации Laravel вы будете часто видеть команды Composer, Artisan и Node/NPM, в которых не упоминается Sail. В этих примерах предполагается, что эти инструменты установлены на вашем компьютере. Если вы используете Sail для своей локальной среды разработки Laravel, вам следует выполнить эти команды с помощью Sail:

Выполнение PHP команд

Команды PHP могут быть выполнены с помощью команды . Конечно, эти команды будут выполняться с использованием версии PHP, настроенной для вашего приложения. Чтобы узнать больше о версиях PHP, доступных для Laravel Sail, обратитесь к :

Выполнение Composer команд

Команды Composer могут быть выполнены с помощью команды . Контейнер приложения Laravel Sail содержит Composer 2.x:

Установка зависимостей Composer для существующих приложений

Если вы разрабатываете приложение в команде, возможно, вы не тот, кто создал приложение Laravel с нуля. Следовательно, ни одна из зависимостей Composer, включая Sail, не будет установлена после клонирования репозитория приложения на локальный компьютер.

Вы можете установить зависимости приложения, перейдя в каталог приложения и выполнив следующую команду. Эта команда использует небольшой контейнер Docker, содержащий PHP и Composer, для установки зависимостей приложения:

Команды Node могут выполняться с помощью команды , а команды NPM выполняются с помощью команды :

Совет 7. Слишком много попыток входа в систему: настройка параметров

Если вы попытаетесь войти в систему с недействительными учетными данными более пяти раз в течение одной и той же минуты, вы будете заблокированы с сообщением слишком много попыток входа в систему. Пожалуйста, повторите попытку через X секунд.

Этот блок будет активен в течение 1 минуты, и он уникален для имени пользователя/электронной почты и их IP-адреса.

Вы можете настроить эти параметры:

  • Количество допустимых попыток в течение минуты (по умолчанию пять попыток)
  • Сколько минут нужно блокировать входы в систему (по умолчанию 1 минута)

Эти два параметра находятся внутри трейта :

Таким образом, чтобы переопределить их, вы можете указать свойства внутри вашего :

Настройка веб-сервера

Настройка даректорий

Laravel всегда должен располагаться за пределами директории, доступной из web. Не нужно размещать приложение в поддиректории «web root». Попытка сделать это может привести к раскрытию конфиденциальной информации, содержащейся в файлахвашего приложения.

Apache

В Laravel есть файл , который используется для отображения ссылок без указания фронт-контроллера в запрашиваемом адресе. Перед началом работы Laravel с сервером Apache, убедитесь, что модуль включен, он необходим для корректной обработки файла .

Если поставляемый с Laravel файл не работает с вашим сервером Apache, то попробуйте альтернативу:

Nginx

Если вы используете Nginx, то следующая директива в конфигурации вашего сайта направит все запросы на фронт-контроллер :

При использовании Homestead или Valet, функция «красивых» URL будет работать без дополнительных настроек.

Установка и настройка

Установка Node

Перед запуском Mix вы должны сначала убедиться, что на вашем компьютере установлены Node.js и NPM:

Вы можете легко установить последнюю версию Node и NPM с помощью простых графических установщиков с официального веб-сайта Node. Или, если вы используете Laravel Sail, вы можете вызывать Node и NPM через Sail:

Установка Laravel Mix

Единственный оставшийся шаг – установить Laravel Mix. В свежей установке Laravel вы найдете файл в вашем корневом каталоге. Файл по умолчанию уже включает в себя все, что вам нужно для начала работы с Laravel Mix. Думайте об этом файле как о вашем файле , за исключением того, что он определяет зависимости Node вместо зависимостей PHP. Вы можете установить зависимости, на которые он ссылается, запустив:

Написание политик

Методы политики

После регистрации класса политики вы можете добавить методы для каждого из авторизуемых действий. Например, давайте определим метод в нашем классе , который решает, может ли пользователь обновить указанный экземпляр поста.

Метод получит в качестве аргументов экземпляры и и должен вернуть или , которые будут указывать, авторизован ли пользователь обновлять указанный пост. Итак, в этом примере мы проверим, что идентификатор пользователя совпадает с поста:

Вы можете продолжить определение в политике необходимых методов дополнительных авторизуемых действий. Например, вы можете определить методы или для авторизации различных действий, связанных с . Помните, что вы можете дать своим методам политики любые желаемые имена.

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

Ответы политики

До сих пор мы рассматривали методы политики, возвращающие простые логические значения. По желанию можно вернуть более подробный ответ, содержащий также сообщение об ошибке. Для этого вы можете вернуть экземпляр из вашего метода политики:

При возврате ответа авторизации из вашей политики метод все равно будет возвращать простое логическое значение; однако вы можете использовать метод , чтобы получить полный возвращенный шлюзом ответ авторизации:

При использовании метода , который генерирует исключение при не авторизованном действие, сообщение об ошибке ответа авторизации будет передано в HTTP-ответ:

Методы политики без моделей

Некоторые методы политики получают только экземпляр аутентифицированного в данный момент пользователя. Эта ситуация наиболее распространена при авторизации действий . Например, если вы создаете блог, то вы можете определить, имеет ли пользователь право вообще создавать какие-либо посты. В этих ситуациях ваш метод политики должен рассчитывать только на получение экземпляра пользователя:

Гостевые пользователи

По умолчанию все шлюзы и политики автоматически возвращают , если входящий HTTP-запрос был инициирован не аутентифицированным пользователем. Однако вы можете разрешить прохождение этих проверок авторизации к вашим шлюзам и политикам, пометив в аргументе метода объявленный тип как , путём добавления префикса в виде знака вопроса (). Это означает, что значение может быть как объявленного типа , так и быть равным :

Фильтры политики

Для определенных пользователей вы можете разрешить все действия в рамках конкретной политики. Для этого определите в политике метод . Метод будет выполнен перед любыми другими методами в политике, что даст вам возможность авторизовать действие до фактического вызова предполагаемого метода политики. Этот функционал чаще всего используется для авторизации администраторов приложения на выполнение любых действий:

Если вы хотите отклонить все проверки авторизации для определенного типа пользователей, вы можете вернуть из метода . Если возвращается , то проверка авторизации перейдет к методу политики.

Добавление задач в очередь

Как только вы написали класс своей очереди, его можно направить используя хелпер . Единственный аргумент, который следует передавать хелперу — экземпляр задачи:

Отложенные задачи

Если вам нужно задержать выполнение задачи в очереди, то можно использовать метод на экземпляре своей задачи. Метод предоставляется трейтом , который по умолчанию включен на всех генерируемых классах задач. Например, давайте укажем, что задаче не следует быть доступной для обработки до истечения 10 минут после ее отправки:

Настройка очереди и подключения

Задание очереди для задачи

Помещая задачи в разные очереди, вы можете разделять их по категориям, а также задавать приоритеты по количеству обработчиков разных очередей. Это не касается различных «подключений» очередей, определённых в файле настроек очереди, а только конкретных очередей в рамках одного подключения. Чтобы указать очередь используйте метод на экземпляре задачи:

Указание подключения к очереди для задачи

Если вы работаете с несколькими подключениями к очередям, то можете указать, в какое из них надо поместить задачу. Для этого служит метод на экземпляре задачи:

Само собой, вы можете сцепить методы и , чтобы указать подключение и очередь для задачи:

Указание макс. попыток задач / значений таймаута

Максимальное число попыток

Один из подходов к определению максимального количества попыток задания может быть выполнен с помощью оператора выбора в командной строке Artisan:

Однако, можно использовать более детализированный подход, указав максимальное число попыток в самом классе задачи. Если для задачи указано максимальное число попыток, это будет иметь приоритет над значением, указанным в командной строке:

Таймаут

Аналогично, максимальное количество секунд, которые может быть запущена задача, можно указать посредством параметра в командной строке Artisan:

Вы также можете самостоятельно задать максимальное количество секунд, на протяжении которых может выполняться задача. Если для задачи указан таймаут, это будет иметь приоритет над таймаутом, указанным в командной строке:

Если во время обработки задачи выбрасывается исключение, задача будет автоматически помещена обратно в очередь, чтобы ее можно было бы попытаться выполнить снова. Задача будет продолжать попытки выполнения, пока не достигнет установленного в вашем приложении максимального количества попыток. Максимальное количество попыток определено в параметре , используемом в Artisan-команде . В качестве альтернативы, максимальное количество попыток можно задать в самом классе задачи. Больше информации о воркере очереди .

Обзор концепции

Трансляция событий Laravel позволяет транслировать серверные события Laravel в JavaScript-приложение на клиентской стороне, используя драйверный подход к WebSockets. В настоящее время Laravel поставляется с драйверами Pusher Channels и Ably. События могут быть легко обработаны на стороне клиента с помощью JavaScript-пакета .

События транслируются по «каналам», которые могут быть публичными или частными. Любой посетитель вашего приложения может подписаться на публичный канал без какой-либо аутентификации или авторизации; однако, чтобы подписаться на частный канал, пользователь должен быть аутентифицирован и авторизован для прослушивания событий на этом канале.

Пример использования

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

Интерфейс

Когда пользователь просматривает один из своих заказов, мы не хотим, чтобы ему приходилось обновлять страницу для просмотра статуса обновлений. Вместо этого мы хотим транслировать обновления в приложение по мере их создания. Итак, нам нужно пометить событие интерфейсом . Это проинструктирует Laravel транслировать событие при его запуске:

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

Авторизация каналов

Помните, что пользователи должны иметь разрешение на прослушивание частных каналов. Мы можем определить наши правила авторизации каналов в файле нашего приложения. В этом примере нам нужно убедиться, что любой пользователь, пытающийся прослушивать частный канал , на самом деле является создателем заказа:

Метод принимает два аргумента: имя канала и замыкание, которое возвращает или , указывая тем самым, имеет ли пользователь право прослушивать канал.

Все замыкания авторизации получают текущего аутентифицированного пользователя в качестве своего первого аргумента и любые дополнительные параметры в качестве своих последующих аргументов. В этом примере мы используем заполнитель , чтобы указать, что часть «ID» имени канала является параметром.

Прослушивание трансляций событий

Далее все, что остается, – это прослушивать событие в нашем JavaScript-приложении. Мы можем сделать это с помощью Laravel Echo. Во-первых, мы будем использовать метод для подписки на частный канал. Затем мы можем использовать метод для прослушивания события . По умолчанию все публичные свойства события будут включены в трансляцию события:

Отправка почты

Вы не ограничены простым указанием получателей при отправке сообщения. Вы можете указать получателей to, и , связав их соответствующие методы вместе:

Итерация списка получателей

Иногда требуется отправить почтовое сообщение списку получателей, перебирая массив получателей / адресов электронной почты. Однако, поскольку метод добавляет адреса электронной почты к списку получателей почтового сообщения, каждая итерация цикла будет отправлять другое электронное письмо каждому предыдущему получателю. Следовательно, вы всегда должны повторно создавать почтовый экземпляр для каждого получателя:

Указание драйвера при отправки почты

По умолчанию Laravel будет отправлять электронную почту, используя почтовую программу, настроенную как почтовую программу в файле конфигурации вашего приложения . Однако вы можете использовать метод для отправки сообщения с использованием определенной конфигурации почтовой программы:

Очередь почты

Постановка сообщения в очередь почты

Поскольку отправка сообщений электронной почты может негативно повлиять на время отклика вашего приложения, многие разработчики ставят сообщения электронной почты в очередь для фоновой отправки. Laravel упрощает это с помощью встроенного API унифицированной очереди. Чтобы поставить почтовое сообщение в очередь, используйте метод фасада после указания получателей сообщения:

Этот метод автоматически помещает задание в очередь, чтобы сообщение отправлялось в фоновом режиме. Перед использованием этого функционала вам необходимо настроить очереди.

Очередь отложенных сообщений

Если вы хотите отложить доставку электронного сообщения в очереди, вы можете использовать метод . В качестве первого аргумента метод принимает экземпляр , указывающий, когда сообщение должно быть отправлено:

Постановка сообщения в конкретную очередь почты

Поскольку все почтовые классы, сгенерированные с помощью команды , используют трейт , вы можете вызвать методы и для любого экземпляра почтового класса, что позволит вам указать соединение и имя очереди для сообщения:

Очередь почты, используемая по умолчанию

Если у вас есть почтовые классы, которые вы хотите всегда ставить в очередь, то вы можете реализовать контракт для этого класса. Теперь, даже если вы вызовете метод для отправки, почтовый класс все равно будет помещен в очередь, поскольку он содержит контракт:

Почтовые сообщения в очереди и транзакции в базе данных

Когда помещенные в очередь почтовые сообщения отправляются в рамках транзакций базы данных, они могут быть обработаны очередью до того, как транзакция базы данных будет зафиксирована. Когда это происходит, любые обновления, внесенные вами в модели или записи базы данных во время транзакции базы данных, могут еще не быть отражены в базе данных. Кроме того, любые модели или записи базы данных, созданные в рамках транзакции, могут не существовать в базе данных. Если ваше почтовое сообщение зависит от этих моделей, при обработке задания, отправляющего почтовое сообщение в очереди, могут возникнуть непредвиденные ошибки.

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

Работа с таблицами стилей

Файл вашего приложения является отправной точкой для компиляции всех ресурсов. Думайте об этом как о легкой конфигурационной обертке вокруг Webpack. Задачи Mix могут быть объединены в цепочку, чтобы точно определить, как должны компилироваться ваши ресурсы.

Tailwind CSS

Tailwind CSS – это современный, низкоутилитарный фреймворк для создания удивительных сайтов, не покидая HTML-разметку. Давайте рассмотрим, как начать использовать его в проекте Laravel совместно с Mix. Во-первых, мы должны установить Tailwind с помощью NPM и сгенерировать наш конфигурационный файл Tailwind:

Команда сгенерирует файл . В этом файле вы можете настроить пути ко всем шаблонам вашего приложения и JavaScript, чтобы Tailwind мог очистить неиспользуемые стили при оптимизации CSS для эксплуатационного окружения:

Затем вы должны добавить каждый из «слоев» Tailwind в файл вашего приложения:

После того, как вы указали необходимые слои Tailwind, необходимо обновить файл вашего приложения, чтобы скомпилировать ваш CSS, использующий Tailwind:

Наконец, вы должны указать свою таблицу стилей в основном шаблоне макета вашего приложения. Многие разработчики приложений предпочитают хранить этот шаблон в . Кроме того, убедитесь, что вы добавили метатег , если он еще не присутствует:

PostCSS

PostCSS – мощный инструмент для преобразования вашего CSS, включен в Laravel Mix из коробки. По умолчанию Mix использует популярный плагин Autoprefixer для автоматического применения всех необходимых префиксов CSS3. Однако вы можете добавлять любые дополнительные плагины, подходящие для вашего приложения.

Сначала установите нужный плагин через NPM и включите его в свой массив плагинов при вызове метода Mix. Метод принимает путь к вашему файлу CSS в качестве первого аргумента, а в качестве второго аргумента – каталог, в который следует поместить скомпилированный файл:

Или вы можете выполнить без дополнительных плагинов, чтобы получить простую компиляцию и минификацию CSS:

Sass

Метод позволяет вам скомпилировать Sass в CSS, понятный веб-браузерам. Метод принимает путь к вашему файлу Sass в качестве своего первого аргумента и каталог, в который должен быть помещен скомпилированный файл, в качестве второго аргумента:

Вы можете скомпилировать несколько файлов Sass в отдельные файлы CSS и даже настроить каталог назначения результирующего CSS, вызывая метод несколько раз:

Обработка URL

Поскольку Laravel Mix построен поверх Webpack, важно понимать несколько концепций Webpack. Для компиляции CSS Webpack перезапишет и оптимизирует любые вызовы в ваших таблицах стилей

Хотя поначалу это может показаться странным, это невероятно мощная функциональность. Представьте, что мы хотим скомпилировать Sass, который включает относительный URL-адрес изображения:

По умолчанию Laravel Mix и Webpack найдут , скопируют его в вашу папку , а затем перепишут в созданной вами таблице стилей. Таким образом, ваш скомпилированный CSS будет:

Какой бы полезной ни была эта функция, возможно, что ваша существующая структура папок уже настроена так, как вам нравится. В этом случае вы можете отключить перезапись следующим образом:

После добавления этой записи в ваш файл , Mix больше не будет сопоставлять какой-либо или копировать ресурсы в ваш публичный каталог. Другими словами, скомпилированный CSS будет выглядеть так же, как вы его изначально указали:

Карты исходников CSS

Хотя по умолчанию они отключены, карты исходников могут быть активированы путем вызова метода в вашем файле . Хоть это и связано с затратами на компиляцию / производительность, но, в свою очередь, предоставит дополнительную отладочную информацию в инструментах разработчика вашего браузера при использовании скомпилированных ресурсов:

Сопоставление стилей исходников

Webpack предлагает множество вариантов . По умолчанию сопоставления стилей исходников Mix установлено как , что обеспечивает быстрое по времени перестроение. Если вы хотите изменить сопоставление, вы можете сделать это с помощью метода :

Использование очередей

Добавление новой задачи в очередь

В очередь в качестве задач (jobs) могут быть добавлены так называемые команды, которые находятся в . Вы можете создать такую команду следующим образом:

Чтобы добавить команду в очередь, воспользуйтесь методом :

По умолчанию создает «self-handling» команду, то есть содержащую метод и коструктор класса-команды и метод , который исполняет команду. Вы можете передать в этот метод необходимые для работы классы в виде аргументов:

Если же вы хотите разделить команду на два класса, т.е. выделить выполнение в отдельный класс, то добавьте флаг при создании:

Хэндлер, т.е. класс с методом будет помещён в .

Отложенное выполнение задачи

Иногда вам нужно, чтобы задача начала исполняться не сразу после занесения её в очередь, а спустя какое-то время. Например, выслать пользователю письмо спустя 15 минут после регистрации. Для этого существует метод :

Здесь для задания временного периода используется библиотека для работы с временем и датой Carbon, но может быть и просто целым числом секунд.

Очереди и модели Eloquent

Если ваша команда, которая отправляется в очередь, принимает модель Eloquent в своём конструкторе, в очередь будет передан только её ID. Когда команда выполняется обработчиком очереди (вызывается метод ), фреймворк автоматически загружает из базы данных экземпляр модели с данным ID. Это происходит полностью прозрачно для приложения.

Удаление выполненной задачи

Когда команда успешно заканчивает выполнение, т.е. в процессе её работы не было брошено ни одно непойманное исключение, она автоматически удаляется из очереди.

Вы можете вручную удалить команду из очереди и вернуть её обратно в очередь. Для этого вам надо добавить в команду трейт , который предоставляет методы и .

Параметр в методе — число секунд, через которое данная команда должна вернуться в очередь.

Помещение команды обратно в очередь

Если во время выполнения команды было брошено непойманное исключение, то команда автоматически помещается обратно в очередь. Так происходит до тех пор, пока не превысится максимальное число попыток, заданное в параметре вашего слушателя очереди.

Ввод/Вывод

Получение данных ввода

Во время исполнения команды, вам очевидно необходимо иметь доступ к значениям аргументов и опций, принятых командой. Для этого вы можете использовать соответствующие методы и :

Если вам нужно получить все аргументы в виде массива, вызовите метод :

Опции могут быть получены точно так же как аргументы, используя метод . Чтобы получить все опции в виде массива, вызовите метод :

Если аргумент или опция не существует, будет возвращен .

Prompting For Input

По мимо отображения вывода, вы также можете попросить пользователя внести какие-либо данные прямо во время исполнения вашей команды. Метод вызовет диалог с переданным вопросом, примет ввод от пользователя, и затем передаст пользовательский ввод обратно в команду:

Метод похож на , но ввод пользователя не будет виден ему, при вводе. Этот метод полезен при запросе конфиденциальной информации, например пароля:

Запрос подтверждения

Если вам нужно запросить у пользователя простое подтверждение, вы можете использовать метод . По умолчанию этот метод возвращает . Однако, если пользователь вводит в ответ на приглашение, метод возвращает .

Автодополнение

Метод может использоваться для автодополнения возможного выбора. Пользователь может выбрать ответ, независимо от подсказок aвтодополнения:

Вопросы с множественным выбором

Если вам нужно дать пользователю заранее определенный набор вариантов, вы можете использовать метод . Вы можете установить значение по умолчанию, которое будет возвращено, если не выбран ни один вариант:

Writing Output

Для вывода данных в консоль, используйте методы , , , и . Каждый из этих методов будет использовать соответствующие цвета ANSI для своих целей. Например, давайте покажем некоторую общую информацию пользователю. Как правило, метод выведет в консоль зеленый текст:

Чтобы отобразить сообщение об ошибке, используйте метод . Текст сообщения об ошибке обычно отображается красным цветом:

Если вы хотите, чтобы отобразить простой, неокрашенный выход консоли, используйте метод :

Макеты таблиц

Метод позволяет легко отформатировать несколько строк/столбцов данных. Просто передайте заголовки и строки в метод. Ширина и высота будет динамически вычисляется на основании приведенных данных:

Индикаторы прогресса

Для длительных задач может оказаться полезным вывести на экран индикатор прогресса. Используя объект вывода, мы можем начать, продвинуть или остановить индикатор. Сначала, нужно определить общее количество шагов которые процесс будет перебирать. Затем, продвинуть индикатор после обработки каждого элемента:

Для использования более продвинутых опций, читайте документацию компонента Symfony Progress Bar.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: