Prompts
- Вступ
- Встановлення
- Доступні Запити
- Перетворення введення перед валідацією
- Форми
- Інформаційні повідомлення
- Таблиці
- Обертання
- Індикатор виконання
- Очищення терміналу
- Міркування щодо терміналу
- Непідтримувані середовища та резервні варіанти
Вступ
Laravel Prompts — це PHP пакет для додавання красивих та зручних форм до ваших командних застосунків, з функціями, схожими на браузерні, включаючи текст-заповнювач та валідацію.

Laravel Prompts ідеально підходить для прийому введення користувача у ваших консольних командах Artisan, але його також можна використовувати в будь-якому PHP-проєкті командного рядка.
Laravel Prompts підтримує macOS, Linux та Windows з WSL. Для отримання додаткової інформації, будь ласка, перегляньте нашу документацію про непідтримувані середовища та резервні рішення.
Встановлення
Laravel Prompts вже включено в останній реліз Laravel.
Laravel Prompts також можуть бути встановлені у ваших інших PHP-проєктах за допомогою менеджера пакетів компонувальник:
composer require laravel/prompts
Доступні Запити
Текст
Функція text запропонує користувачеві задане питання, прийме їх введення і потім поверне його:
use function Laravel\Prompts\text; $name = text('Як вас звати?');
Ви також можете включити текст-заповнювач, значення за замовчуванням та інформаційну підказку:
$name = text( label: 'Як вас звати?', placeholder: 'Наприклад, Taylor Otwell', default: $user?->name, hint: 'Це буде відображено у вашому профілі.' );
Обов'язкові значення
Якщо ви вимагаєте введення значення, ви можете передати аргумент required:
$name = text( label: 'Як вас звати?', required: true );
Якщо ви хочете налаштувати повідомлення про перевірку, ви також можете передати рядок:
$name = text( label: 'Як вас звати?', required: 'Ваше ім'я обов'язкове.' );
Додаткова валідація
Нарешті, якщо ви хочете виконати додаткову логіку валідації, ви можете передати замикання в аргумент validate:
$name = text( label: 'Як вас звати?', validate: fn (string $value) => match (true) { strlen($value) < 3 => 'Ім’я має містити щонайменше 3 символи.', strlen($value) > 255 => 'Ім’я не повинно перевищувати 255 символів.', default => null } );
Замикання отримає значення, яке було введено, і може повернути повідомлення про помилку або null, якщо перевірка пройшла успішно.
Альтернативно, ви можете скористатися потужністю валідатора Laravel. Для цього надайте масив, що містить ім'я атрибута та бажані правила валідації, аргументу validate:
$name = text( label: 'Як вас звати?', validate: ['name' => 'required|max:255|unique:users'] );
Textarea
Функція textarea запропонує користувачеві задане питання, прийме їх введення через багаторядкове текстове поле, а потім поверне його:
use function Laravel\Prompts\textarea; $story = textarea('Розкажіть мені історію.');
Ви також можете включити текст-заповнювач, значення за замовчуванням та інформаційну підказку:
$story = textarea( label: 'Розкажіть мені історію.', placeholder: 'Це історія про...', hint: 'Це буде відображено у вашому профілі.' );
Обов'язкові значення
Якщо ви вимагаєте введення значення, ви можете передати аргумент required:
$story = textarea( label: 'Розкажіть мені історію.', required: true );
Якщо ви хочете налаштувати повідомлення про перевірку, ви також можете передати рядок:
$story = textarea( label: 'Розкажіть мені історію.', required: 'Історія обов'язкова.' );
Додаткова Валідація
Нарешті, якщо ви хочете виконати додаткову логіку валідації, ви можете передати замикання в аргумент validate:
$story = textarea( label: 'Розкажіть мені історію.', validate: fn (string $value) => match (true) { strlen($value) < 250 => 'Історія має містити щонайменше 250 символів.', strlen($value) > 10000 => 'Історія не повинна перевищувати 10 000 символів.', default => null } );
Замикання отримає значення, яке було введено, і може повернути повідомлення про помилку або null, якщо перевірка пройшла успішно.
Альтернативно, ви можете скористатися потужністю валідатора Laravel. Для цього надайте масив, що містить ім'я атрибута та бажані правила валідації, аргументу validate:
$story = textarea( label: 'Розкажіть мені історію.', validate: ['story' => 'required|max:10000'] );
Пароль
Функція password схожа на функцію text, але введення користувача буде замасковане під час введення в консолі. Це корисно, коли запитуєте конфіденційну інформацію, таку як паролі:
use function Laravel\Prompts\password; $password = password('Який ваш пароль?');
Ви також можете включити текст-заповнювач та інформаційну підказку:
$password = password( label: 'Який ваш пароль?', placeholder: 'password', hint: 'Мінімум 8 символів.' );
Обов'язкові значення
Якщо ви вимагаєте введення значення, ви можете передати аргумент required:
$password = password( label: 'Який ваш пароль?', required: true );
Якщо ви хочете налаштувати повідомлення про перевірку, ви також можете передати рядок:
$password = password( label: 'Який ваш пароль?', required: 'Пароль обов'язковий.' );
Додаткова валідація
Нарешті, якщо ви хочете виконати додаткову логіку валідації, ви можете передати замикання в аргумент validate:
$password = password( label: 'Який ваш пароль?', validate: fn (string $value) => match (true) { strlen($value) < 8 => 'Пароль має містити щонайменше 8 символів.', default => null } );
Замикання отримає значення, яке було введено, і може повернути повідомлення про помилку або null, якщо перевірка пройшла успішно.
Альтернативно, ви можете скористатися потужністю валідатора Laravel. Для цього надайте масив, що містить ім'я атрибута та бажані правила валідації, аргументу validate:
$password = password( label: 'Який ваш пароль?', validate: ['password' => 'min:8'] );
Підтвердити
Якщо вам потрібно попросити користувача підтвердити "так або ні", ви можете використовувати функцію confirm. Користувачі можуть використовувати клавіші зі стрілками або натиснути y або n для вибору своєї відповіді. Ця функція поверне або true, або false.
use function Laravel\Prompts\confirm; $confirmed = confirm('Ви приймаєте умови?');
Ви також можете включити значення за замовчуванням, налаштовані написи для міток "Так" і "Ні", а також інформаційну підказку:
$confirmed = confirm( label: 'Ви приймаєте умови?', default: false, yes: 'Я приймаю', no: 'Я відмовляюсь', hint: 'Умови повинні бути прийняті, щоб продовжити.' );
Вимагає "Так"
Якщо необхідно, ви можете вимагати від ваших користувачів вибрати "Так", передавши аргумент required:
$confirmed = confirm( label: 'Ви приймаєте умови?', required: true );
Якщо ви хочете налаштувати повідомлення про перевірку, ви також можете передати рядок:
$confirmed = confirm( label: 'Ви приймаєте умови?', required: 'Ви повинні прийняти умови, щоб продовжити.' );
Вибрати
Якщо вам потрібно, щоб користувач вибрав з попередньо визначеного набору варіантів, ви можете використовувати функцію select:
use function Laravel\Prompts\select; $role = select( label: 'Яку роль повинен мати користувач?', options: ['Member', 'Contributor', 'Owner'] );
Ви також можете вказати вибір за замовчуванням та інформаційну підказку:
$role = select( label: 'Яку роль повинен мати користувач?', options: ['Member', 'Contributor', 'Owner'], default: 'Owner', hint: 'Роль може бути змінена в будь-який час.' );
Ви також можете передати асоціативний масив до аргументу options, щоб повернути вибраний ключ замість його значення:
$role = select( label: 'Яку роль повинен мати користувач?', options: [ 'member' => 'Учасник', 'contributor' => 'Співавтор', 'owner' => 'Власник', ], default: 'owner' );
До п'яти опцій буде відображено перед тим, як список почне прокручуватися. Ви можете налаштувати це, передавши аргумент scroll:
$role = select( label: 'Яку категорію ви хочете призначити?', options: Category::pluck('name', 'id'), scroll: 10 );
Додаткова валідація
На відміну від інших функцій запиту, функція select не приймає аргумент required, оскільки неможливо вибрати нічого. Однак, ви можете передати замикання в аргумент validate, якщо вам потрібно представити опцію, але заборонити її вибір:
$role = select( label: 'Яку роль повинен мати користувач?', options: [ 'member' => 'Учасник', 'contributor' => 'Співавтор', 'owner' => 'Власник', ], validate: fn (string $value) => $value === 'owner' && User::where('role', 'owner')->exists() ? 'Власник вже існує.' : null );
Якщо аргумент options є асоціативним масивом, тоді замикання отримає вибраний ключ, інакше воно отримає вибране значення. Замикання може повернути повідомлення про помилку або null, якщо валідація пройшла успішно.
Мультивибір
Якщо вам потрібно, щоб користувач міг вибрати кілька варіантів, ви можете використовувати функцію multiselect:
use function Laravel\Prompts\multiselect; $permissions = multiselect( label: 'Які дозволи повинен мати користувач?', options: ['Read', 'Create', 'Update', 'Delete'] );
Ви також можете вказати вибір за замовчуванням та інформаційну підказку:
use function Laravel\Prompts\multiselect; $permissions = multiselect( label: 'Які дозволи повинен мати користувач?', options: ['Read', 'Create', 'Update', 'Delete'], default: ['Read', 'Create'], hint: 'Дозволи можуть бути оновлені в будь-який час.' );
Ви також можете передати асоціативний масив до аргументу options, щоб повернути ключі вибраних опцій замість їх значень:
$permissions = multiselect( label: 'Які дозволи повинен мати користувач?', options: [ 'read' => 'Читання', 'create' => 'Створення', 'update' => 'Оновлення', 'delete' => 'Видалення', ], default: ['read', 'create'] );
До п'яти опцій буде відображено перед тим, як список почне прокручуватися. Ви можете налаштувати це, передавши аргумент scroll:
$categories = multiselect( label: 'Які категорії слід призначити?', options: Category::pluck('name', 'id'), scroll: 10 );
Вимагання Значення
За замовчуванням користувач може вибрати нуль або більше опцій. Ви можете передати аргумент required, щоб вимагати одну або більше опцій:
$categories = multiselect( label: 'Які категорії слід призначити?', options: Category::pluck('name', 'id'), required: true );
Якщо ви хочете налаштувати повідомлення про валідацію, ви можете надати рядок для аргументу required:
$categories = multiselect( label: 'Які категорії слід призначити?', options: Category::pluck('name', 'id'), required: 'Ви повинні вибрати принаймні одну категорію' );
Додаткова валідація
Ви можете передати замикання в аргумент validate, якщо вам потрібно представити опцію, але заборонити її вибір:
$permissions = multiselect( label: 'Які дозволи повинен мати користувач?', options: [ 'read' => 'Читання', 'create' => 'Створення', 'update' => 'Оновлення', 'delete' => 'Видалення', ], validate: fn (array $values) => ! in_array('read', $values) ? 'Усі користувачі повинні мати дозвіл на читання.' : null );
Якщо аргумент options є асоціативним масивом, тоді замикання отримає вибрані ключі, інакше воно отримає вибрані значення. Замикання може повернути повідомлення про помилку або null, якщо валідація пройшла успішно.
Запропонувати
Функція suggest може бути використана для надання автозаповнення можливих варіантів. Користувач все ще може надати будь-яку відповідь, незалежно від підказок автозаповнення:
use function Laravel\Prompts\suggest; $name = suggest('Як вас звати?', ['Taylor', 'Dayle']);
Альтернативно, ви можете передати замикання як другий аргумент до функції suggest. Це замикання буде викликано кожного разу, коли користувач вводить символ. Замикання повинно приймати рядковий параметр, що містить введення користувача на даний момент, і повертати масив варіантів для автозаповнення:
$name = suggest( label: 'Як вас звати?', options: fn ($value) => collect(['Taylor', 'Dayle']) ->filter(fn ($name) => Str::contains($name, $value, ignoreCase: true)) )
Ви також можете включити текст-заповнювач, значення за замовчуванням та інформаційну підказку:
$name = suggest( label: 'Як вас звати?', options: ['Taylor', 'Dayle'], placeholder: 'Наприклад, Taylor', default: $user?->name, hint: 'Це буде відображено у вашому профілі.' );
Обов'язкові значення
Якщо ви вимагаєте введення значення, ви можете передати аргумент required:
$name = suggest( label: 'Як вас звати?', options: ['Taylor', 'Dayle'], required: true );
Якщо ви хочете налаштувати повідомлення про перевірку, ви також можете передати рядок:
$name = suggest( label: 'Як вас звати?', options: ['Taylor', 'Dayle'], required: 'Ваше ім'я обов'язкове.' );
Додаткова валідація
Нарешті, якщо ви хочете виконати додаткову логіку валідації, ви можете передати замикання в аргумент validate:
$name = suggest( label: 'Як вас звати?', options: ['Taylor', 'Dayle'], validate: fn (string $value) => match (true) { strlen($value) < 3 => 'м’я має містити щонайменше 3 символи.', strlen($value) > 255 => 'Ім’я не повинно перевищувати 255 символів.', default => null } );
Замикання отримає значення, яке було введено, і може повернути повідомлення про помилку або null, якщо перевірка пройшла успішно.
Альтернативно, ви можете скористатися потужністю валідатора Laravel. Для цього надайте масив, що містить ім'я атрибута та бажані правила валідації, аргументу validate:
$name = suggest( label: 'Як вас звати?', options: ['Taylor', 'Dayle'], validate: ['name' => 'required|min:3|max:255'] );
Пошук
Якщо у вас є багато варіантів для вибору користувачем, функція search дозволяє користувачеві ввести пошуковий запит для фільтрації результатів перед використанням клавіш зі стрілками для вибору варіанту:
use function Laravel\Prompts\search; $id = search( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [] );
Замикання отримає текст, який користувач ввів до цього моменту, і має повернути масив опцій. Якщо ви повернете асоціативний масив, то буде повернено ключ вибраної опції, інакше буде повернено її значення.
Коли фільтруєте масив, де ви маєте намір повернути значення, слід використовувати функцію array_values або метод values колекції, щоб гарантувати, що масив не стане асоціативним:
$names = collect(['Taylor', 'Abigail']); $selected = search( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => $names ->filter(fn ($name) => Str::contains($name, $value, ignoreCase: true)) ->values() ->all(), );
Ви також можете включити текст-заповнювач та інформаційну підказку:
$id = search( label: 'Пошук користувачів, які повинні отримати лист', placeholder: 'Наприклад, Taylor Otwell', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], hint: 'Користувач отримає електронний лист негайно.' );
До п'яти опцій буде відображено перед тим, як список почне прокручуватися. Ви можете налаштувати це, передавши аргумент scroll:
$id = search( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], scroll: 10 );
Додаткова валідація
Якщо ви хочете виконати додаткову логіку валідації, ви можете передати замикання в аргумент validate:
$id = search( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], validate: function (int|string $value) { $user = User::findOrFail($value); if ($user->opted_out) { return 'Цей користувач відмовився від отримання листів.'; } } );
Якщо замикання options повертає асоціативний масив, тоді замикання отримає вибраний ключ, в іншому випадку, воно отримає вибране значення. Замикання може повернути повідомлення про помилку або null, якщо валідація пройшла успішно.
Мультипошук
Якщо у вас є багато варіантів для пошуку і потрібно, щоб користувач міг вибрати кілька елементів, функція multisearch дозволяє користувачу ввести пошуковий запит для фільтрації результатів перед використанням клавіш зі стрілками та пробілу для вибору варіантів:
use function Laravel\Prompts\multisearch; $ids = multisearch( 'Пошук користувачів, які повинні отримати лист', fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [] );
Замикання отримає текст, який користувач ввів до цього моменту, і має повернути масив опцій. Якщо ви повернете асоціативний масив, то будуть повернуті ключі вибраних опцій; в іншому випадку будуть повернуті їх значення.
Коли фільтруєте масив, де ви маєте намір повернути значення, слід використовувати функцію array_values або метод values колекції, щоб гарантувати, що масив не стане асоціативним:
$names = collect(['Taylor', 'Abigail']); $selected = multisearch( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => $names ->filter(fn ($name) => Str::contains($name, $value, ignoreCase: true)) ->values() ->all(), );
Ви також можете включити текст-заповнювач та інформаційну підказку:
$ids = multisearch( label: 'Пошук користувачів, які повинні отримати лист', placeholder: 'Наприклад, Taylor Otwell', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], hint: 'Користувач отримає електронний лист негайно.' );
До п'яти опцій буде відображено перед тим, як список почне прокручуватися. Ви можете налаштувати це, надавши аргумент scroll:
$ids = multisearch( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], scroll: 10 );
Вимога Значення
За замовчуванням користувач може вибрати нуль або більше опцій. Ви можете передати аргумент required, щоб вимагати вибір однієї або більше опцій:
$ids = multisearch( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], required: true );
Якщо ви хочете налаштувати повідомлення про перевірку, ви також можете надати рядок для аргументу required:
$ids = multisearch( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], required: 'Ви маєте вибрати хоча б одного користувача.' );
Додаткова Валідація
Якщо ви хочете виконати додаткову логіку валідації, ви можете передати замикання в аргумент validate:
$ids = multisearch( label: 'Пошук користувачів, які повинні отримати лист', options: fn (string $value) => strlen($value) > 0 ? User::whereLike('name', "%{$value}%")->pluck('name', 'id')->all() : [], validate: function (array $values) { $optedOut = User::whereLike('name', '%a%')->findMany($values); if ($optedOut->isNotEmpty()) { return $optedOut->pluck('name')->join(', ', ', and ').' відмовилися.'; } } );
Якщо замикання options повертає асоціативний масив, тоді замикання отримає вибрані ключі; в іншому випадку, воно отримає вибрані значення. Замикання може повернути повідомлення про помилку або null, якщо перевірка пройшла успішно.
Пауза
Функція pause може бути використана для відображення інформаційного тексту користувачу та очікування підтвердження їхнього бажання продовжити, натиснувши клавішу Enter / Return:
use function Laravel\Prompts\pause; pause('Натисніть ENTER, щоб продовжити.');
Перетворення введення перед валідацією
Іноді ви можете захотіти трансформувати вхідні дані підказки перед тим, як відбудеться валідація. Наприклад, ви можете захотіти видалити пробіли з будь-яких наданих рядків. Щоб досягти цього, багато функцій підказки надають аргумент transform, який приймає замикання:
$name = text( label: 'Як вас звати?', transform: fn (string $value) => trim($value), validate: fn (string $value) => match (true) { strlen($value) < 3 => 'Ім’я має містити щонайменше 3 символи.', strlen($value) > 255 => 'Ім’я не повинно перевищувати 255 символів.', default => null } );
Форми
Часто у вас буде кілька підказок, які будуть відображатися послідовно для збору інформації перед виконанням додаткових дій. Ви можете використовувати функцію form для створення групи підказок, які користувач повинен заповнити:
use function Laravel\Prompts\form; $responses = form() ->text('Як вас звати?', required: true) ->password('Який ваш пароль?', validate: ['password' => 'min:8']) ->confirm('Ви приймаєте умови?') ->submit();
Метод submit поверне числовий індексований масив, що містить всі відповіді з підказок форми. Однак, ви можете надати ім'я для кожної підказки через аргумент name. Коли ім'я надано, відповідь на підказку з іменем може бути доступна через це ім'я:
use App\Models\User; use function Laravel\Prompts\form; $responses = form() ->text('Як вас звати?', required: true, name: 'name') ->password( label: 'Який ваш пароль?', validate: ['password' => 'min:8'], name: 'password' ) ->confirm('Ви приймаєте умови?') ->submit(); User::create([ 'name' => $responses['name'], 'password' => $responses['password'], ]);
Основна перевага використання функції form полягає в можливості для користувача повернутися до попередніх запитів у формі, використовуючи CTRL + U. Це дозволяє користувачу виправляти помилки або змінювати вибір без необхідності скасовувати та перезапускати всю форму.
Якщо вам потрібен більш детальний контроль над підказкою у формі, ви можете викликати метод add замість того, щоб безпосередньо викликати одну з функцій підказки. Метод add отримує всі попередні відповіді, надані користувачем:
use function Laravel\Prompts\form; use function Laravel\Prompts\outro; use function Laravel\Prompts\text; $responses = form() ->text('Як вас звати?', required: true, name: 'name') ->add(function ($responses) { return text("Скільки вам років, {$responses['name']}?"); }, name: 'age') ->submit(); outro("Ваше ім'я - {$responses['name']} і вам {$responses['age']} років.");
Інформаційні повідомлення
Функції note, info, warning, error та alert можуть бути використані для відображення інформаційних повідомлень:
use function Laravel\Prompts\info; info('Пакет успішно встановлено.');
Таблиці
Функція table полегшує відображення декількох рядків і стовпців даних. Все, що вам потрібно зробити, це надати назви стовпців і дані для таблиці:
use function Laravel\Prompts\table;
table(
headers: ['Name', 'Email'],
rows: User::all(['name', 'email'])->toArray()
);
Обертання
Функція spin відображає індикатор завантаження разом із необов'язковим повідомленням під час виконання вказаного зворотного виклику. Вона служить для вказівки на процеси, що тривають, і повертає результати зворотного виклику після завершення:
use function Laravel\Prompts\spin; $response = spin( message: 'Отримання відповіді...', callback: fn () => Http::get('http://example.com') );
Функція spin вимагає розширення PHP pcntl для анімації спінера. Коли це розширення недоступне, замість нього з'явиться статична версія спінера.
Індикатори виконання
Для довготривалих завдань може бути корисним показати індикатор прогресу, який інформує користувачів про те, наскільки завдання виконано. Використовуючи функцію progress, Laravel відобразить індикатор прогресу та просуватиме його прогрес для кожної ітерації над заданим ітерованим значенням:
use function Laravel\Prompts\progress; $users = progress( label: 'Оновлення користувачів', steps: User::all(), callback: fn ($user) => $this->performTask($user) );
Функція progress діє як функція map і поверне масив, що містить значення, яке повертається на кожній ітерації вашого зворотного виклику.
Зворотний виклик також може приймати екземпляр Laravel\Prompts\Progress, дозволяючи вам змінювати мітку та підказку на кожній ітерації:
$users = progress( label: 'Оновлення користувачів', steps: User::all(), callback: function ($user, $progress) { $progress ->label("Оновлення {$user->name}") ->hint("Створений в {$user->created_at}"); return $this->performTask($user); }, hint: 'Це може зайняти певний час.' );
Іноді вам може знадобитися більше ручного контролю над тим, як просувається індикатор прогресу. Спочатку визначте загальну кількість кроків, через які процес буде проходити. Потім просувайте індикатор прогресу за допомогою методу advance після обробки кожного елемента:
$progress = progress(label: 'Оновлення користувачів', steps: 10); $users = User::all(); $progress->start(); foreach ($users as $user) { $this->performTask($user); $progress->advance(); } $progress->finish();
Очищення терміналу
Функція clear може бути використана для очищення терміналу користувача:
use function Laravel\Prompts\clear;
clear();
Міркування щодо терміналу
Ширина терміналу
Якщо довжина будь-якої мітки, опції або повідомлення валідації перевищує кількість "стовпців" у терміналі користувача, вона буде автоматично скорочена, щоб відповідати. Розгляньте можливість зменшення довжини цих рядків, якщо ваші користувачі можуть використовувати вужчі термінали. Зазвичай безпечна максимальна довжина становить 74 символи, щоб підтримувати термінал на 80 символів.
Висота терміналу
Для будь-яких підказок, які приймають аргумент scroll, налаштоване значення буде автоматично зменшено, щоб відповідати висоті терміналу користувача, включаючи місце для повідомлення про перевірку.
Непідтримувані середовища та резервні варіанти
Laravel Prompts підтримує macOS, Linux та Windows з WSL. Через обмеження у версії PHP для Windows наразі неможливо використовувати Laravel Prompts на Windows поза WSL.
З цієї причини Laravel Prompts підтримує повернення до альтернативної реалізації, такої як Symfony Console Question Helper.
Коли ви використовуєте Laravel Prompts з фреймворком Laravel, резервні варіанти для кожного запиту були налаштовані для вас і будуть автоматично увімкнені в непідтримуваних середовищах.
Умови резервного копіювання
Якщо ви не використовуєте Laravel або вам потрібно налаштувати, коли використовується поведінка резервного копіювання, ви можете передати булеве значення до статичного методу fallbackWhen класу Prompt:
use Laravel\Prompts\Prompt;
Prompt::fallbackWhen(
! $input->isInteractive() || windows_os() || app()->runningUnitTests()
);
Поведінка за замовчуванням
Якщо ви не використовуєте Laravel або вам потрібно налаштувати поведінку резервного механізму, ви можете передати замикання до статичного методу fallbackUsing у кожному класі підказки:
use Laravel\Prompts\TextPrompt;
use Symfony\Component\Console\Question\Question;
use Symfony\Component\Console\Style\SymfonyStyle;
TextPrompt::fallbackUsing(function (TextPrompt $prompt) use ($input, $output) {
$question = (new Question($prompt->label, $prompt->default ?: null))
->setValidator(function ($answer) use ($prompt) {
if ($prompt->required && $answer === null) {
throw new \RuntimeException(
is_string($prompt->required) ? $prompt->required : 'Required.'
);
}
if ($prompt->validate) {
$error = ($prompt->validate)($answer ?? '');
if ($error) {
throw new \RuntimeException($error);
}
}
return $answer;
});
return (new SymfonyStyle($input, $output))
->askQuestion($question);
});
Резервні варіанти повинні бути налаштовані окремо для кожного класу запиту. Замикання отримає екземпляр класу запиту і повинно повернути відповідний тип для запиту.
