Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Console
/
Concerns
:
PromptsForMissingInput.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Illuminate\Console\Concerns; use Closure; use Illuminate\Contracts\Console\PromptsForMissingInput as PromptsForMissingInputContract; use Illuminate\Support\Arr; 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) { 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 = collect($this->getDefinition()->getArguments()) ->reject(fn (InputArgument $argument) => $argument->getName() === 'command') ->filter(fn (InputArgument $argument) => $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 */ 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 collect($this->getDefinition()->getOptions()) ->reject(fn ($option) => $input->getOption($option->getName()) === $option->getDefault()) ->isNotEmpty(); } }