Laravel Console Menu

nunomaduro/laravel-console-menu image

Laravel Console Menu stats

Downloads
255.7K
Stars
793
Open Issues
5
Forks
35

View on GitHub →

Laravel Console Menu is an output method for your Laravel/Laravel Zero commands.

Static Analysis Latest Stable Version License

About Laravel Console Menu

Laravel Console Menu was created by, and is maintained by Nuno Maduro, and is a php-school/cli-menu wrapper for Laravel Console Commands.

Installation

Requires PHP 8.1+

Require Laravel Console Menu using Composer:

composer require nunomaduro/laravel-console-menu

Usage

Quick Setup

class MenuCommand extends Command
{
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
$option = $this->menu('Pizza menu', [
'Freshly baked muffins',
'Freshly baked croissants',
'Turnovers, crumb cake, cinnamon buns, scones',
])->open();
 
$this->info("You have chosen the option number #$option");
}
}

Setup with a question

class MenuCommand extends Command
{
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
$option = $this->menu('Pizza menu')
->addOption('mozzarella', 'Mozzarella')
->addOption('chicken_parm', 'Chicken Parm')
->addOption('sausage', 'Sausage')
->addQuestion('Make your own', 'Describe your pizza...')
->addOption('burger', 'Prefer burgers')
->setWidth(80)
->open();
 
$this->info("You have chosen the text option: $option");
}
}

Setup with advanced option, in this case, a password

class MenuCommand extends Command
{
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
$menu = $this->menu('Pizza menu')
->addOption('mozzarella', 'Mozzarella')
->addOption('chicken_parm', 'Chicken Parm')
->addOption('sausage', 'Sausage')
->addQuestion('Make your own', 'Describe your pizza...');
 
$itemCallable = function (CliMenu $cliMenu) use ($menu) {
$cliMenu->askPassword()
->setValidator(function ($password) {
return $password === 'secret';
})
->setPromptText('Secret password?')
->ask();
 
$menu->setResult('Free spice!');
 
$cliMenu->close();
};
$menu->addItem('Add extra spice for free (password needed)', $itemCallable);
 
 
$option = $menu->addOption('burger', 'Prefer burgers')
->setWidth(80)
->open();
 
$this->info("You have chosen the text option: $option");
}
}

Appearance

Available colors: black, red, green, yellow, blue, magenta, cyan, white.

$this->menu($title, $options)
->setForegroundColour('green')
->setBackgroundColour('black')
->setWidth(200)
->setPadding(10)
->setMargin(5)
->setExitButtonText("Abort") // remove exit button with ->disableDefaultItems()
->setTitleSeparator('*-')
->addLineBreak('<3', 2)
->addStaticItem('AREA 2')
->open();

Check out the full documentation here.

Contributing

Thank you for considering to contribute to Laravel Console Menu. All the contribution guidelines are mentioned here.

You can have a look at the CHANGELOG for constant updates & detailed information about the changes. You can also follow the twitter account for latest announcements or just come say hi!: @enunomaduro

Support the development

Do you like this project? Support it by donating

License

Laravel Console Menu is an open-sourced software licensed under the MIT license.

nunomaduro photo

Software engineer at @laravel — working on Laravel, Forge, and Vapor. Created @pestphp, @laravel-zero, collision, @openai-php, php insights, termwind, etc.

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Nunomaduro Laravel Console Menu Related Articles

Beautiful PHP CLI Menus for Laravel Artisan Commands image

Beautiful PHP CLI Menus for Laravel Artisan Commands

Read article
PhpStorm logo

PhpStorm

The go-to PHP IDE with extensive out-of-the-box support for Laravel and its ecosystem.

PhpStorm
Statamic logo

Statamic

The drop-in ready Laravel CMS you’re been waiting for. Go full-stack or headless, flat file or database – it’s up to you.

Statamic
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $9500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
LoadForge logo

LoadForge

Scalable load testing for web apps & APIs. Simulate real-world traffic and identify breaking points and performance limits with powerful, scalable load tests designed for Laravel.

LoadForge
Typesense Search logo

Typesense Search

Typesense is an open source, blazing-fast search engine, optimized for helping you build delightful search experiences for your sites and apps. Natively integrated with Laravel Scout.

Typesense Search
Curotec logo

Curotec

World class Laravel experts with GenAI dev skills. LATAM-based, embedded engineers that ship fast, communicate clearly, and elevate your product. No bloat, no BS.

Curotec