/
githubmirror
/
framework
Обзор
Документация
Войти
/
githubmirror
/
framework
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
13.x
src/Illuminate/Console/Concerns/PromptsForMissingInput.php
107 строк
4 KB
Lucas Michot
[13.x] Avoid redundant Collection passes in map/filter/reject chains (#60977)
02 авг 2026, 23:33
Не верифицирован
02 авг 2026, 23:33
1c81321
Код
Авторство
О чём код?
<?php namespace Illuminate\Console\Concerns; use Closure; use Illuminate\Contracts\Console\PromptsForMissingInput as PromptsForMissingInputContract; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use function Laravel\Prompts\text; trait PromptsForMissingInput { /** * Interact with the user before validating the input. * * @param \Symfony\Component\Console\Input\InputInterface $input * @param \Symfony\Component\Console\Output\OutputInterface $output * @return void */ protected function interact(InputInterface $input, OutputInterface $output): void { parent::interact($input, $output); if ($this instanceof PromptsForMissingInputContract) { $this->promptForMissingArguments($input, $output); } } /** * Prompt the user for any missing arguments. * * @param \Symfony\Component\Console\Input\InputInterface $input * @param \Symfony\Component\Console\Output\OutputInterface $output * @return void */ protected function promptForMissingArguments(InputInterface $input, OutputInterface $output) { $prompted = (new Collection($this->getDefinition()->getArguments())) ->filter(fn (InputArgument $argument) => $argument->getName() !== 'command' && $argument->isRequired() && match (true) { $argument->isArray() => empty($input->getArgument($argument->getName())), default => is_null($input->getArgument($argument->getName())), }) ->each(function (InputArgument $argument) use ($input) { $label = $this->promptForMissingArgumentsUsing()[$argument->getName()] ?? 'What is '.lcfirst($argument->getDescription() ?: ('the '.$argument->getName())).'?'; if ($label instanceof Closure) { return $input->setArgument($argument->getName(), $argument->isArray() ? Arr::wrap($label()) : $label()); } if (is_array($label)) { [$label, $placeholder] = $label; } $answer = text( label: $label, placeholder: $placeholder ?? '', validate: fn ($value) => empty($value) ? "The {$argument->getName()} is required." : null, ); $input->setArgument($argument->getName(), $argument->isArray() ? [$answer] : $answer); }) ->isNotEmpty(); if ($prompted) { $this->afterPromptingForMissingArguments($input, $output); } } /** * Prompt for missing input arguments using the returned questions. * * @return array<string, string|array{string, string}|\Closure(): (array<int|string>|string|int|bool)> */ protected function promptForMissingArgumentsUsing() { return []; } /** * Perform actions after the user was prompted for missing arguments. * * @param \Symfony\Component\Console\Input\InputInterface $input * @param \Symfony\Component\Console\Output\OutputInterface $output * @return void */ protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) { // } /** * Whether the input contains any options that differ from the default values. * * @param \Symfony\Component\Console\Input\InputInterface $input * @return bool */ protected function didReceiveOptions(InputInterface $input) { return (new Collection($this->getDefinition()->getOptions())) ->contains(fn ($option) => $input->getOption($option->getName()) !== $option->getDefault()); } }