نسخه:

درخواست می کند

معرفی

Laravel Prompts یک بسته PHP برای افزودن فرم‌های زیبا و کاربرپسند به برنامه‌های خط فرمان شما، با ویژگی‌های مرورگر مانند متن مکان‌نما و اعتبارسنجی است.

Laravel Prompts برای پذیرش ورودی کاربر در دستورات کنسول Artisan شما عالی است ، اما ممکن است در هر پروژه PHP خط فرمان نیز استفاده شود.

Laravel Prompts از macOS، Linux و Windows با WSL پشتیبانی می کند. برای اطلاعات بیشتر، لطفاً به مستندات ما در مورد محیط‌های پشتیبانی‌نشده و جایگزین‌ها مراجعه کنید .

نصب و راه اندازی

Laravel Prompts قبلاً با آخرین نسخه Laravel گنجانده شده است.

Laravel Prompts همچنین ممکن است با استفاده از مدیریت بسته Composer در سایر پروژه های PHP شما نصب شود:

composer require laravel/prompts

درخواست های موجود

متن

این text تابع از کاربر سوال داده شده را درخواست می کند، ورودی او را می پذیرد و سپس آن را برمی گرداند:

use function Laravel\Prompts\text;
 
$name = text('What is your name?');

همچنین می‌توانید متن مکان‌دار، یک مقدار پیش‌فرض، و یک راهنمایی اطلاعاتی را نیز شامل کنید:

$name = text(
label: 'What is your name?',
placeholder: 'E.g. Taylor Otwell',
default: $user?->name,
hint: 'This will be displayed on your profile.'
);

ارزش های مورد نیاز

اگر نیاز به وارد کردن مقدار دارید، می توانید required آرگومان را ارسال کنید:

$name = text(
label: 'What is your name?',
required: true
);

اگر می‌خواهید پیام اعتبارسنجی را سفارشی کنید، می‌توانید یک رشته را نیز ارسال کنید:

$name = text(
label: 'What is your name?',
required: 'Your name is required.'
);

اعتبار سنجی اضافی

در نهایت، اگر می خواهید منطق اعتبار سنجی اضافی را انجام دهید، ممکن است یک بسته برای validate آرگومان تصویب کنید:

$name = text(
label: 'What is your name?',
validate: fn (string $value) => match (true) {
strlen($value) < 3 => 'The name must be at least 3 characters.',
strlen($value) > 255 => 'The name must not exceed 255 characters.',
default => null
}
);

بسته شدن مقدار وارد شده را دریافت می کند و ممکن است یک پیام خطا برگرداند یا null اگر اعتبار سنجی انجام شود.

از طرف دیگر، می‌توانید از قدرت اعتبارسنجی لاراول استفاده کنید . برای انجام این کار، یک آرایه حاوی نام ویژگی و قوانین اعتبارسنجی مورد نظر را برای validate آرگومان ارائه دهید:

$name = text(
label: 'What is your name?',
validate: ['name' => 'required|max:255|unique:users,name']
);

کلمه عبور

عملکرد password مشابه تابع است text ، اما ورودی کاربر هنگام تایپ در کنسول پنهان می شود. این در هنگام درخواست اطلاعات حساس مانند رمزهای عبور مفید است:

use function Laravel\Prompts\password;
 
$password = password('What is your password?');

همچنین می‌توانید متن مکان‌نما و یک راهنمایی اطلاعاتی را اضافه کنید:

$password = password(
label: 'What is your password?',
placeholder: 'password',
hint: 'Minimum 8 characters.'
);

ارزش های مورد نیاز

اگر نیاز به وارد کردن مقدار دارید، می توانید required آرگومان را ارسال کنید:

$password = password(
label: 'What is your password?',
required: true
);

اگر می‌خواهید پیام اعتبارسنجی را سفارشی کنید، می‌توانید یک رشته را نیز ارسال کنید:

$password = password(
label: 'What is your password?',
required: 'The password is required.'
);

اعتبار سنجی اضافی

در نهایت، اگر می خواهید منطق اعتبار سنجی اضافی را انجام دهید، ممکن است یک بسته برای validate آرگومان تصویب کنید:

$password = password(
label: 'What is your password?',
validate: fn (string $value) => match (true) {
strlen($value) < 8 => 'The password must be at least 8 characters.',
default => null
}
);

بسته شدن مقدار وارد شده را دریافت می کند و ممکن است یک پیام خطا برگرداند یا null اگر اعتبار سنجی انجام شود.

از طرف دیگر، می‌توانید از قدرت اعتبارسنجی لاراول استفاده کنید . برای انجام این کار، یک آرایه حاوی نام ویژگی و قوانین اعتبارسنجی مورد نظر را برای validate آرگومان ارائه دهید:

$password = password(
label: 'What is your password?',
validate: ['password' => 'min:8']
);

تایید

اگر لازم است از کاربر تأیید «بله یا خیر» بخواهید، می‌توانید از این confirm تابع استفاده کنید. کاربران می توانند از کلیدهای جهت دار استفاده کنند یا برای انتخاب پاسخ خود، y یا را فشار دهند. این تابع یکی یا را n برمی گرداند . true false

use function Laravel\Prompts\confirm;
 
$confirmed = confirm('Do you accept the terms?');

همچنین می‌توانید یک مقدار پیش‌فرض، عبارت سفارشی‌شده برای برچسب‌های «بله» و «خیر» و یک راهنمایی اطلاعاتی اضافه کنید:

$confirmed = confirm(
label: 'Do you accept the terms?',
default: false,
yes: 'I accept',
no: 'I decline',
hint: 'The terms must be accepted to continue.'
);

نیاز به "بله"

در صورت لزوم، ممکن است از کاربران خود بخواهید که "بله" را با ارسال required آرگومان انتخاب کنند:

$confirmed = confirm(
label: 'Do you accept the terms?',
required: true
);

اگر می‌خواهید پیام اعتبارسنجی را سفارشی کنید، می‌توانید یک رشته را نیز ارسال کنید:

$confirmed = confirm(
label: 'Do you accept the terms?',
required: 'You must accept the terms to continue.'
);

انتخاب کنید

اگر نیاز دارید که کاربر از میان مجموعه ای از انتخاب های از پیش تعریف شده انتخاب کند، می توانید از select تابع استفاده کنید:

use function Laravel\Prompts\select;
 
$role = select(
'What role should the user have?',
['Member', 'Contributor', 'Owner'],
);

همچنین می توانید انتخاب پیش فرض و یک راهنمایی اطلاعاتی را مشخص کنید:

$role = select(
label: 'What role should the user have?',
options: ['Member', 'Contributor', 'Owner'],
default: 'Owner',
hint: 'The role may be changed at any time.'
);

همچنین می توانید یک آرایه انجمنی را به options آرگومان ارسال کنید تا کلید انتخاب شده به جای مقدار آن بازگردانده شود:

$role = select(
label: 'What role should the user have?',
options: [
'member' => 'Member',
'contributor' => 'Contributor',
'owner' => 'Owner'
],
default: 'owner'
);

قبل از شروع لیست، حداکثر پنج گزینه نمایش داده می شود. شما می توانید این را با ارسال scroll آرگومان سفارشی کنید:

$role = select(
label: 'Which category would you like to assign?',
options: Category::pluck('name', 'id'),
scroll: 10
);

اعتبار سنجی

برخلاف سایر توابع prompt، select تابع آرگومان را نمی پذیرد required زیرا امکان انتخاب چیزی وجود ندارد. با این حال، validate اگر نیاز به ارائه گزینه ای دارید اما از انتخاب آن جلوگیری می کنید، ممکن است یک آرگومان بسته شود :

$role = select(
label: 'What role should the user have?',
options: [
'member' => 'Member',
'contributor' => 'Contributor',
'owner' => 'Owner'
],
validate: fn (string $value) =>
$value === 'owner' && User::where('role', 'owner')->exists()
? 'An owner already exists.'
: null
);

اگر options آرگومان یک آرایه انجمنی باشد، بسته شدن کلید انتخاب شده را دریافت می کند، در غیر این صورت مقدار انتخاب شده را دریافت می کند. بسته شدن ممکن است یک پیغام خطا برگرداند، یا null اگر تأیید اعتبار بگذرد.

چند انتخابی

اگر نیاز دارید که کاربر بتواند چندین گزینه را انتخاب کند، می توانید از multiselect تابع استفاده کنید:

use function Laravel\Prompts\multiselect;
 
$permissions = multiselect(
'What permissions should be assigned?',
['Read', 'Create', 'Update', 'Delete']
);

همچنین می‌توانید انتخاب‌های پیش‌فرض و یک راهنمایی اطلاعاتی را مشخص کنید:

use function Laravel\Prompts\multiselect;
 
$permissions = multiselect(
label: 'What permissions should be assigned?',
options: ['Read', 'Create', 'Update', 'Delete'],
default: ['Read', 'Create'],
hint: 'Permissions may be updated at any time.'
);

همچنین می توانید یک آرایه انجمنی را به options آرگومان ارسال کنید تا کلیدهای گزینه های انتخاب شده را به جای مقادیر آنها برگردانید:

$permissions = multiselect(
label: 'What permissions should be assigned?',
options: [
'read' => 'Read',
'create' => 'Create',
'update' => 'Update',
'delete' => 'Delete'
],
default: ['read', 'create']
);

قبل از شروع لیست، حداکثر پنج گزینه نمایش داده می شود. شما می توانید این را با ارسال scroll آرگومان سفارشی کنید:

$categories = multiselect(
label: 'What categories should be assigned?',
options: Category::pluck('name', 'id'),
scroll: 10
);

نیاز به یک ارزش

به طور پیش فرض، کاربر ممکن است صفر یا چند گزینه را انتخاب کند. می‌توانید required آرگومان را برای اعمال یک یا چند گزینه به جای آن ارسال کنید:

$categories = multiselect(
label: 'What categories should be assigned?',
options: Category::pluck('name', 'id'),
required: true,
);

اگر می‌خواهید پیام اعتبارسنجی را سفارشی کنید، می‌توانید یک رشته برای required آرگومان ارائه دهید:

$categories = multiselect(
label: 'What categories should be assigned?',
options: Category::pluck('name', 'id'),
required: 'You must select at least one category',
);

اعتبار سنجی

validate اگر نیاز به ارائه یک گزینه دارید اما از انتخاب آن جلوگیری می کنید، می توانید به آرگومان بسته بنویسید :

$permissions = multiselect(
label: 'What permissions should the user have?',
options: [
'read' => 'Read',
'create' => 'Create',
'update' => 'Update',
'delete' => 'Delete'
],
validate: fn (array $values) => ! in_array('read', $values)
? 'All users require the read permission.'
: null
);

اگر options آرگومان یک آرایه انجمنی باشد، بسته شدن کلیدهای انتخاب شده را دریافت می کند، در غیر این صورت مقادیر انتخاب شده را دریافت می کند. بسته شدن ممکن است یک پیغام خطا برگرداند، یا null اگر تأیید اعتبار بگذرد.

پیشنهاد می دهد

این suggest تابع می تواند برای ارائه تکمیل خودکار برای انتخاب های ممکن استفاده شود. کاربر همچنان می تواند هر پاسخی را بدون توجه به نکات تکمیل خودکار ارائه دهد:

use function Laravel\Prompts\suggest;
 
$name = suggest('What is your name?', ['Taylor', 'Dayle']);

از طرف دیگر، می توانید یک بسته را به عنوان آرگومان دوم به suggest تابع ارسال کنید. هر بار که کاربر یک کاراکتر ورودی را تایپ می کند، بسته شدن فراخوانی می شود. بسته شدن باید یک پارامتر رشته ای را که تا کنون حاوی ورودی کاربر است بپذیرد و آرایه ای از گزینه ها را برای تکمیل خودکار بازگرداند:

$name = suggest(
'What is your name?',
fn ($value) => collect(['Taylor', 'Dayle'])
->filter(fn ($name) => Str::contains($name, $value, ignoreCase: true))
)

همچنین می‌توانید متن مکان‌دار، یک مقدار پیش‌فرض، و یک راهنمایی اطلاعاتی را نیز شامل کنید:

$name = suggest(
label: 'What is your name?',
options: ['Taylor', 'Dayle'],
placeholder: 'E.g. Taylor',
default: $user?->name,
hint: 'This will be displayed on your profile.'
);

ارزش های مورد نیاز

اگر نیاز به وارد کردن مقدار دارید، می توانید required آرگومان را ارسال کنید:

$name = suggest(
label: 'What is your name?',
options: ['Taylor', 'Dayle'],
required: true
);

اگر می‌خواهید پیام اعتبارسنجی را سفارشی کنید، می‌توانید یک رشته را نیز ارسال کنید:

$name = suggest(
label: 'What is your name?',
options: ['Taylor', 'Dayle'],
required: 'Your name is required.'
);

اعتبار سنجی اضافی

در نهایت، اگر می خواهید منطق اعتبار سنجی اضافی را انجام دهید، ممکن است یک بسته برای validate آرگومان تصویب کنید:

$name = suggest(
label: 'What is your name?',
options: ['Taylor', 'Dayle'],
validate: fn (string $value) => match (true) {
strlen($value) < 3 => 'The name must be at least 3 characters.',
strlen($value) > 255 => 'The name must not exceed 255 characters.',
default => null
}
);

بسته شدن مقدار وارد شده را دریافت می کند و ممکن است یک پیام خطا برگرداند یا null اگر اعتبار سنجی انجام شود.

از طرف دیگر، می‌توانید از قدرت اعتبارسنجی لاراول استفاده کنید . برای انجام این کار، یک آرایه حاوی نام ویژگی و قوانین اعتبارسنجی مورد نظر را برای validate آرگومان ارائه دهید:

$name = suggest(
label: 'What is your name?',
options: ['Taylor', 'Dayle'],
validate: ['name' => 'required|min:3|max:255']
);

اگر گزینه‌های زیادی برای انتخاب کاربر دارید، این search تابع به کاربر اجازه می‌دهد قبل از استفاده از کلیدهای جهت‌دار برای انتخاب یک گزینه، یک عبارت جستجو را برای فیلتر کردن نتایج تایپ کند:

use function Laravel\Prompts\search;
 
$id = search(
'Search for the user that should receive the mail',
fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: []
);

بسته شدن متنی را که کاربر تاکنون تایپ کرده است دریافت می کند و باید مجموعه ای از گزینه ها را برگرداند. اگر یک آرایه انجمنی را برگردانید، کلید گزینه انتخاب شده برگردانده می شود، در غیر این صورت مقدار آن به جای آن بازگردانده می شود.

همچنین می‌توانید متن مکان‌نما و یک راهنمایی اطلاعاتی را اضافه کنید:

$id = search(
label: 'Search for the user that should receive the mail',
placeholder: 'E.g. Taylor Otwell',
options: fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
hint: 'The user will receive an email immediately.'
);

قبل از شروع لیست، حداکثر پنج گزینه نمایش داده می شود. شما می توانید این را با ارسال scroll آرگومان سفارشی کنید:

$id = search(
label: 'Search for the user that should receive the mail',
options: fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
scroll: 10
);

اعتبار سنجی

اگر می‌خواهید منطق اعتبار سنجی اضافی را انجام دهید، می‌توانید آرگومان را به طور کامل ببندید validate :

$id = search(
label: 'Search for the user that should receive the mail',
options: fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
validate: function (int|string $value) {
$user = User::findOrFail($value);
 
if ($user->opted_out) {
return 'This user has opted-out of receiving mail.';
}
}
);

اگر options بسته شدن یک آرایه انجمنی را برگرداند، بسته شدن کلید انتخاب شده را دریافت می کند، در غیر این صورت، مقدار انتخاب شده را دریافت می کند. بسته شدن ممکن است یک پیغام خطا برگرداند، یا null اگر تأیید اعتبار بگذرد.

جستجوی چندگانه

اگر گزینه‌های قابل جستجوی زیادی دارید و نیاز دارید که کاربر بتواند چندین مورد را انتخاب کند، این multisearch تابع به کاربر اجازه می‌دهد قبل از استفاده از کلیدهای جهت‌نما و فاصله برای انتخاب گزینه‌ها، یک عبارت جستجو را برای فیلتر کردن نتایج تایپ کند:

use function Laravel\Prompts\multisearch;
 
$ids = multisearch(
'Search for the users that should receive the mail',
fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: []
);

بسته شدن متنی را که کاربر تاکنون تایپ کرده است دریافت می کند و باید مجموعه ای از گزینه ها را برگرداند. اگر یک آرایه انجمنی را برگردانید، کلیدهای انتخاب شده برگردانده می شوند. در غیر این صورت، مقادیر آنها به جای آن بازگردانده می شود.

همچنین می‌توانید متن مکان‌نما و یک راهنمایی اطلاعاتی را اضافه کنید:

$ids = multisearch(
label: 'Search for the users that should receive the mail',
placeholder: 'E.g. Taylor Otwell',
options: fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
hint: 'The user will receive an email immediately.'
);

قبل از شروع لیست، حداکثر پنج گزینه نمایش داده می شود. شما می توانید این را با ارائه scroll آرگومان سفارشی کنید:

$ids = multisearch(
label: 'Search for the users that should receive the mail',
options: fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
scroll: 10
);

نیاز به یک ارزش

به طور پیش فرض، کاربر ممکن است صفر یا چند گزینه را انتخاب کند. می‌توانید required آرگومان را برای اعمال یک یا چند گزینه به جای آن ارسال کنید:

$ids = multisearch(
'Search for the users that should receive the mail',
fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
required: true,
);

اگر می‌خواهید پیام اعتبارسنجی را سفارشی کنید، می‌توانید یک رشته برای required آرگومان نیز ارائه کنید:

$ids = multisearch(
'Search for the users that should receive the mail',
fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
required: 'You must select at least one user.'
);

اعتبار سنجی

اگر می‌خواهید منطق اعتبار سنجی اضافی را انجام دهید، می‌توانید آرگومان را به طور کامل ببندید validate :

$ids = multisearch(
label: 'Search for the users that should receive the mail',
options: fn (string $value) => strlen($value) > 0
? User::where('name', 'like', "%{$value}%")->pluck('name', 'id')->all()
: [],
validate: function (array $values) {
$optedOut = User::where('name', 'like', '%a%')->findMany($values);
 
if ($optedOut->isNotEmpty()) {
return $optedOut->pluck('name')->join(', ', ', and ').' have opted out.';
}
}
);

اگر options بسته شدن یک آرایه انجمنی را برگرداند، بسته شدن کلیدهای انتخاب شده را دریافت خواهد کرد. در غیر این صورت، مقادیر انتخاب شده را دریافت خواهد کرد. بسته شدن ممکن است یک پیغام خطا برگرداند، یا null اگر تأیید اعتبار بگذرد.

مکث کنید

این pause تابع ممکن است برای نمایش متن اطلاعاتی به کاربر استفاده شود و منتظر بمانید تا با فشار دادن کلید Enter / Return تمایل خود را برای ادامه کار تأیید کند:

use function Laravel\Prompts\pause;
 
pause('Press ENTER to continue.');

پیام های اطلاعاتی

توابع note , info , , و ممکن است برای نمایش پیام های اطلاعاتی استفاده شوند warning : error alert

use function Laravel\Prompts\info;
 
info('Package installed successfully.');

جداول

این table تابع نمایش چندین ردیف و ستون داده را آسان می کند. تنها کاری که باید انجام دهید این است که نام ستون ها و داده های جدول را ارائه دهید:

use function Laravel\Prompts\table;
 
table(
['Name', 'Email'],
User::all(['name', 'email'])
);

چرخش

این spin عملکرد یک اسپینر را به همراه یک پیام اختیاری در حین اجرای یک پاسخ تماس مشخص نشان می دهد. این برای نشان دادن فرآیندهای در حال انجام عمل می کند و پس از تکمیل نتایج تماس برگشتی را برمی گرداند:

use function Laravel\Prompts\spin;
 
$response = spin(
fn () => Http::get('http://example.com'),
'Fetching response...'
);

این spin تابع pcntl برای متحرک سازی اسپینر به پسوند PHP نیاز دارد. وقتی این افزونه در دسترس نباشد، به جای آن یک نسخه ثابت از اسپینر ظاهر می شود.

نوارهای پیشرفت

برای کارهای طولانی مدت، نشان دادن یک نوار پیشرفت که به کاربران اطلاع می دهد کار چقدر کامل است، می تواند مفید باشد. با استفاده از progress تابع، لاراول یک نوار پیشرفت را نمایش می دهد و پیشرفت آن را برای هر تکرار بر روی یک مقدار قابل تکرار معین پیش می برد:

use function Laravel\Prompts\progress;
 
$users = progress(
label: 'Updating users',
steps: User::all(),
callback: fn ($user) => $this->performTask($user),
);

این progress تابع مانند یک تابع نقشه عمل می کند و یک آرایه حاوی مقدار بازگشتی هر تکرار از پاسخ تماس شما را برمی گرداند.

پاسخ به تماس ممکن است این \Laravel\Prompts\Progress نمونه را نیز بپذیرد و به شما امکان می‌دهد برچسب را تغییر دهید و در هر تکرار اشاره کنید:

$users = progress(
label: 'Updating users',
steps: User::all(),
callback: function ($user, $progress) {
$progress
->label("Updating {$user->name}")
->hint("Created on {$user->created_at}");
 
return $this->performTask($user);
},
hint: 'This may take some time.',
);

گاهی اوقات، ممکن است به کنترل دستی بیشتری در مورد چگونگی پیشرفت نوار پیشرفت نیاز داشته باشید. ابتدا تعداد کل مراحلی که فرآیند طی آن تکرار می شود را مشخص کنید. سپس، نوار پیشرفت را از طریق advance روش پس از پردازش هر مورد، پیش ببرید:

$progress = progress(label: 'Updating users', steps: 10);
 
$users = User::all();
 
$progress->start();
 
foreach ($users as $user) {
$this->performTask($user);
 
$progress->advance();
}
 
$progress->finish();

ملاحظات ترمینال

عرض ترمینال

اگر طول هر برچسب، گزینه یا پیام تأیید اعتبار از تعداد «ستون‌ها» در ترمینال کاربر بیشتر شود، به‌طور خودکار برای تناسب کوتاه می‌شود. اگر کاربران شما ممکن است از پایانه های باریک تری استفاده کنند، طول این رشته ها را به حداقل برسانید. حداکثر طول ایمن معمولاً 74 کاراکتر برای پشتیبانی از ترمینال 80 کاراکتری است.

ارتفاع ترمینال

برای هر درخواستی که scroll آرگومان را می‌پذیرد، مقدار پیکربندی شده به‌طور خودکار کاهش می‌یابد تا با ارتفاع ترمینال کاربر، از جمله فضایی برای پیام تأیید اعتبار، تناسب داشته باشد.

محیط‌های پشتیبانی‌نشده و عقب‌نشینی‌ها

Laravel Prompts از macOS، Linux و Windows با WSL پشتیبانی می کند. به دلیل محدودیت در نسخه ویندوز PHP، در حال حاضر امکان استفاده از Laravel Prompts در ویندوز خارج از WSL وجود ندارد.

به همین دلیل، Laravel Prompts از بازگشت به یک پیاده سازی جایگزین مانند Symfony Console Question Helper پشتیبانی می کند .

هنگام استفاده از Laravel Prompts با فریم ورک لاراول، بک گراند برای هر فرمان برای شما پیکربندی شده است و به طور خودکار در محیط های پشتیبانی نشده فعال می شود.

شرایط بازگشتی

اگر از لاراول استفاده نمی‌کنید یا نیاز به سفارشی‌سازی هنگام استفاده از رفتار بازگشتی دارید، می‌توانید یک بولین را به fallbackWhen متد استاتیک در Prompt کلاس ارسال کنید:

use Laravel\Prompts\Prompt;
 
Prompt::fallbackWhen(
! $input->isInteractive() || windows_os() || app()->runningUnitTests()
);

رفتار بازگشتی

اگر از لاراول استفاده نمی‌کنید یا نیاز به سفارشی‌سازی رفتار بازگشتی دارید، می‌توانید یک بسته شدن متد fallbackUsing استاتیک را در هر کلاس prompt ارسال کنید:

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);
});

فالبک ها باید به صورت جداگانه برای هر کلاس سریع پیکربندی شوند. بسته شدن نمونه‌ای از کلاس prompt را دریافت می‌کند و باید یک نوع مناسب برای prompt برگرداند.