Command автобус (автобусна команда)

Command автобус в Laravel - удобен начин за капсулиране (изолират) задачите на вашата кандидатура по прост и разбираем "екип". За да се разбере назначаването на отбора, нека си представим, че ние сме писмено заявление, в което ние продаваме нашите потребители подкасти.







Когато потребителят купува подкаст, ние трябва да направи няколко действия, които ние трябва да се теглят пари от картата си, да добавите запис в базата данни, че покупката се проведе успешно и изпращане на имейл с доказателство за покупка. Може би дори трябва да се извърши няколко проверки - и дали потребителят има право да направи, за да купите този подкаст.

Обикновено, ние поставяме всичко това логика в контролера, обаче, този подход има няколко недостатъка. На първо място, класа контролер обикновено съдържа няколко метода за обработка на HTTP-заявки и позициониране логика във всеки метод, които правим, контролери твърде голям, е трудно да се чете и е трудно да се поддържа. Второ, кодът е труден за употреба контекст на контролера и HTTP-заявката (например, ако искаме да се извърши покупка на подкасти от командния ред, или опашката). На трето място, това е трудно да се провери, защото ние трябва да подражават на HTTP-заявка и разбор на HTTP-отговор.

Ето защо, вместо да тази логика в контролера, ние ще го организира в така наречената командване и го наричат ​​PurchasePodcast.

тийм билдинг

Създаване на екип с помощта на майстор-екип направи: команда:

Създаден от тази команда се поставя в класа на приложението папка / команди. По подразбиране, командата съдържа два метода - метод конструктор и дръжка. С помощта на дизайнера, можете да добавите необходимите зависимости в класа на отбора, и да се справят метода действително изпълнява командата. Например:

метод дръжка също може да отнеме в зависимост от аргументите (тип Хинтоване), както и дизайнер. Като дизайнер, те автоматично ще се приложат към входа с помощта на контейнера МОК.

изпълнение на команди

Създали сме отбор, сега го изпълните? Разбира се, можем да изпълним нашия метод дръжка от един клас, но това е по-добре да го стартирате от командния автобуса Laravel. На предимствата на този подход ще бъде обсъдено по-долу.

Ако се вгледате в основния контролер на вашата кандидатура, която да удължи собствения си контролер, вие ще видите, че има отличителна черта DispatchesCommands. Тази черта ви позволява да стартирате команди чрез метода на изпращане. Например:







Командата се изпълнява командата автобуса и поема цялата рутина, за да се гарантира, клас екип с всички необходими зависимости, изброени в аргумента на аргументите на строителя и дръжката на метод.

Можете да използвате команда автобуса в някоя от класа си - за тази добавка комбинирани признаци Illuminate \ Фондация \ Автобусни \ DispatchesCommands. Ако искате да поеме командването на автобус инстанция в конструктора, посочите аргументите (тип с подсказки) осветява обекта \ договорите за \ автобус \ експедитор. И накрая, можете просто да използвате автобус фасадата да изпълните командата:

Предаването на параметри от искането

Почти винаги, ще трябва да се прехвърлят данните от HTTP-заявка (например извадка от $ _POST) към отбора. Вместо да ви се наложи ръчно да се опише всяка заявка, Laravel предлага нещо по-автоматизирано. Погледнете комбинирани признаци DispatchesCommands метода dispatchFrom:

Този метод конструктор изглежда, чието име се подава като първи аргумент, и вади искане променлива $ (това HTTP-заявка или просто всеки тип обект ArrayObject) тези ключове, които съответстват на името на променливата в аргумента на строителя. Например, ако има конструктор с променливи аргументи $ FirstName. След това тя се дава стойността на FirstName HTTP заявка.

Можете да мине масив като трети по подразбиране аргумент:

Работещи този фон

Command автобус може да се използва не само за незабавното създаване на задачите в текущата заявка, но и сложи екипа, за да ги управляват в отделен процес. По този начин, на командния автобуса може да бъде основният инструмент за чакане.

За да се създаде екип, който ще работи във фонов режим, да добавяте флага --queued:

Създаден клас ще наследи на интерфейса Illuminate \ договорите \ Queue \ ShouldBeQueued и имат качества и черти SerializesModels. Тази функционалност ще позволи на екипа добавят към опашката за последващото старта на опашката за слушател и добавя способността да се сериализира и десериализиране Впечатляващо постижение-модел.

Ако вече сте се създаде екип и искате да я накара да работи във фонов режим, просто ръчно добавяне оръдия Светят \ Договори \ Queue \ ShouldBeQueued. Този интерфейс не съдържа изискваните методи и е просто показател за командния автобуса. След това изпращане метод, вместо да се налага да изпълните командата, сложи го на опашка за по-късно начало на заден план.

Екип конвейери

Преди екипът ще бъде в предната част на контролера, можете да го донесе на транспортната лента в други класове. Транспортни команди също работят като HTTP-посредници. Например, можете да наслагвате всички операции, извършени от екипа на сделката, или просто да влезете на факта на неговото прилагане.

За да добавите конвейер се за команда автобус, обадете метод pipeThrough мениджър в неговия метод App \ доставчици \ BusServiceProvider :: зареждане:

Транспортни команди, описани в метода на дръжка:

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

Като елемент конвейер може да се използва схема:

Присъединете се сега