Консольний додаток advanced yii 2, skill

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

Структура консольних додатків дуже схожа на структуру веб додатки. Вона складається з одного і більше класів [[yii \ console \ Controller]], які часто називають командами в консольної середовищі. Кожен контролер може мати одне або більше дій, як і веб контролери.

В обох шаблонах проектів вже є консольний додаток. Ви можете запустити його, викликавши скрипт yii, який знаходиться в основний директорії вашого застосування. Ви отримаєте список доступних команд, якщо викличете його без параметрів:

Як ви можете бачити на скріншоті, в Yii уже визначений набір доступних за замовчуванням команд:

Використання

Ви можете запустити дію консольного контролера, використовуючи наступний синтаксис:

У наведеному вище прикладі, відноситься до дії контролера. Параметри будуть підставлятися в властивості класу і в аргументи методу дії.

Для прикладу, [[yii \ console \ controllers \ MigrateController :: actionUp () | MigrateController :: actionUp ()]] з [[yii \ console \ controllers \ MigrateController :: $ migrationTable | MigrateController :: $ migrationTable]] установкою migrations і лімітом в 5 міграцій може бути викликане наступним чином:

Примітка. При використанні в консолі *. не забудьте помістити її в лапки "*" щоб уникнути її інтерпретації і заміни на всі імена файлів в даній директорії.

вхідний скрипт

Вхідний скрипт консольного застосування - це подібність файлу index.php. використовуваного в веб додатку. Вхідний скрипт консолі, як правило, називається yii і розташовується в основний директорії додатку. Він містить код схожий на наступне:

Цей скрипт буде створений як частина вашої програми; ви можете його редагувати, якщо вам це необхідно. YII_DEBUG можете встановити в false якщо вам не потрібно бачити зневаджувальної при помилку, і / або якщо ви хочете поліпшити загальну продуктивність. В обох шаблонах додатка, у вхідному скрипті додатки налагодження включена за замовчуванням для забезпечення більш дружнього до розробника оточення.

Як видно з наведеного вище коду, консольний додаток використовує свій власний файл конфігурації, названий console.php. У цьому файлі ви повинні зробити налаштування різних компонентів програми та властивостей консольного застосування.

Якщо ваше веб і консольний додаток має багато спільних параметрів конфігурації, ви можете виділити загальну частину в окремий файл, і включити його в обидва файли конфігурації (веб і консоль). Ви можете подивитися приклад в "просунутому" шаблоні проекту.

Підказка: Іноді, вам може знадобитися запустити консольную команду використовуючи конфігурацію, відмінну від тієї, що зазначено у вхідному скрипті. Для прикладу, ви можете використовувати команду yii migrate для поновлення тестової бази даних, яка налаштовується для кожного окремого набору тестів. Для зміни файлу конфігурації, просто вкажіть свій конфігураційний файл через опцію appconfig при запуску команди:

yii --appconfig = path / to / config.php.

Створення ваших власних команд

Консольний контролер і дію

Консольна команда визначається як клас контролера розширює [[yii \ console \ Controller]]. У класі контролера, ви визначаєте одне або кілька дій, які відповідають суб-командам контролера. У кожній дії ви пишете код, який реалізує відповідні даної суб-команді завдання.

При запуску команди, вам необхідно вказати маршрут до дії. Наприклад, маршрут migrate / create викликає суб-команду, яка відповідає методу [[yii \ console \ controllers \ MigrateController :: actionCreate () | MigrateController :: actionCreate ()]]. Якщо маршрут, запропонований при виклику команди, не містить вказівки ідентифікатора дії, буде викликано дію за замовчуванням (так само як і в веб додатку).

Для перевизначення [[yii \ console \ Controller :: options ()]] методу, ви можете вказати опції, які доступні в консольної команді (controller / actionID). Метод повинен повертати список публічних атрибутів класу. При запуску команди ви можете вказати значення опцій, використовуючи синтаксис --OptionName = OptionValue. Це зв'яже OptionValue з атрибутом OptionName класу контролера.

Якщо значення за замовчуванням опції - це масив, то при установці цієї опції, при виконанні команди, значення буде перетворено в масив шляхом поділу входить рядки по комам.

Крім опцій, команда може отримувати аргументи. Аргументи будуть передані в якості параметрів в метод дії, відповідного запитаної суб-команді. Перший аргумент відповідає першому параметру, другий відповідно другого, і так далі. Якщо переданих аргументів при виклику команди буде недостатньо, то параметрами будуть призначені за замовчуванням, якщо вони визначені. Якщо значення за замовчуванням не визначені, і не були передані, команда завершить виконання з помилкою.

Ви можете використовувати вказівку типу array. щоб вказати що аргумент повинен розглядатися як масив. Масив буде згенеровано шляхом розділення вхідного рядка по комам.

Наступний приклад показує як описувати аргументи:

код повернення

При розробці консольного застосування прийнято використовувати код повернення. Прийнято, код 0 означає, що команда виконалася вдало. Якщо команда повернула код більше нуля, то це говорить про помилку. Номер, який був повернутий при помилку, потенційно може бути використаний для пошуку більш детальної інформації про помилку. Для прикладу 1 може вказувати на невідому помилку, а всі коди вище можуть бути зарезервовані під специфічні помилки: помилки введення, пошкоджені файли, і щось інше.

Для того, щоб ваша консольна команда повертала код повернення, просто поверніть ціле число в методі дії контролера:

Є кілька зумовлених констант, які ви можете використовувати:

  • Controller :: EXIT_CODE_NORMAL зі значенням 0;
  • Controller :: EXIT_CODE_ERROR зі значенням 1.

Хороша практика, визначати значущі для вашого контролера константи в разі, якщо ви використовуєте більше типів помилок.

Форматування і кольору

Консоль Yii підтримує форматування виводу, який автоматично деградує до НЕ форматированного, якщо це підтримується в терміналі де запускається команда.

Виведення тексту рядків простий. Ось як можна вивести деякий жирний текст:

Якщо вам потрібно зібрати рядок динамічно об'єднуючи кілька стилів, краще використовувати ansiFormat:

Схожі статті