Call interactive artisan command using arbitrary stream.
- PHP:
^8.0
- Laravel:
^9.0 || ^10.0
- guzzlehttp/psr7:
^1.7
composer require mpyw/streamable-console
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class QuizCommand extends Command
{
protected $signature = 'example:quiz';
/**
* @return int
*/
public function handle(): int
{
// We need to type "no" and press Enter to pass
if ($this->confirm('Is one plus one equals to three?', true)) {
return 1;
}
return 0;
}
}
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Mpyw\StreamableConsole\Streamable;
class RunCommand extends Command
{
use Streamable;
protected $signature = 'example:run';
/**
* @return int
*/
public function handle(): int
{
// Type "no" and press Enter
return $this->usingInputStream("no\n")->call('example:quiz');
}
}
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class QuizCommand extends Command
{
protected $signature = 'example:quiz';
/**
* @return int
*/
public function handle(): int
{
// We need to type "no" and press Enter to pass at least for three times
if ($this->confirm('Is one plus one equals to three?', true)) {
return 1;
}
if ($this->confirm('Is one plus one equals to three?', true)) {
return 1;
}
if ($this->confirm('Is one plus one equals to three?', true)) {
return 1;
}
return 0;
}
}
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Mpyw\StreamableConsole\Streamable;
class RunCommand extends Command
{
use Streamable;
protected $signature = 'example:run';
/**
* @return int
*/
public function handle(): int
{
// Infinitely type "no" and press Enter
return $this->usingInfiniteInput("no\n")->call('example:quiz');
}
}
Note that you can use yes()
as an alias of usingInfiniteInput()
.