laminas/laminas-cli
Command-line tooling for Laminas applications. Provides a framework-agnostic CLI entry point and command infrastructure to run, discover, and organize project commands, with integration hooks for Laminas components and workflows.
laminas-cli is designed for Laminas MVC and Mezzio applications, leveraging their PSR-11 container and Symfony Console compatibility. For a Laravel-based project, this introduces a mismatch in core architecture (Laravel uses Service Providers, Facades, and Illuminate/Console instead of Laminas' ServiceManager or Mezzio's DI container).vendor/bin/laminas) for Laminas projects, which could be repurposed in Laravel if the underlying Symfony Console commands are adapted. However, Laravel’s native artisan CLI is deeply integrated and optimized for its ecosystem.laminas-mvc or mezzio).illuminate/console is a fork of Symfony Console, so command classes (e.g., Symfony\Component\Console\Command\Command) are compatible but may require adjustments for Laravel-specific features (e.g., Artisan helpers).laminas-cli config key in config/autoload/.laminas-cli, but requires:
Artisan command registration with Laminas’ ConfigProvider/Module pattern.bind() in Laravel vs. factories in Laminas).vendor/bin/laminas) alongside artisan could cause confusion for developers. Laravel’s CLI is batteries-included (migrations, queues, etc.), while laminas-cli is a generic wrapper.laminas-cli (and its dependencies like laminas/laminas-cli-tools) may introduce unnecessary abstractions if the goal is purely CLI functionality.App\Console\Kernel).laminas-cli config).artisan expects commands under app/Console/Commands/, while laminas-cli uses a package:command-name prefix.config/console.php vs. Laminas’ laminas-cli config key could lead to merge conflicts.laminas-mvc) that requires laminas-cli?artisan entirely, or run side-by-side?laminas-cli in favor of Laravel-native solutions?laminas-cli add significant overhead compared to artisan?illuminate/console is a Symfony fork).laminas-cli relies on module/config-based registration, while Laravel uses Service Providers.artisan with zero additional dependencies.Process facade is sufficient.| Step | Action | Laravel Adaptation |
|---|---|---|
| 1 | Install laminas-cli |
composer require laminas/laminas-cli |
| 2 | Register Custom Commands | Replace Artisan::command() with Symfony Command classes. |
| 3 | Configure Laminas CLI | Add laminas-cli config to config/app.php (or a new config file). |
| 4 | Bind Dependencies | Use Laravel’s Service Container bindings instead of Laminas factories. |
| 5 | Test CLI Entry Point | Run ./vendor/bin/laminas and verify commands work. |
| 6 | Deprecate artisan (Optional) |
Redirect artisan to laminas-cli via a custom script or alias. |
Example Migration:
// Before (Laravel Artisan Command)
Artisan::command('my:command', function () {
// ...
});
// After (Symfony Command for laminas-cli)
namespace App\Console\Commands;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class MyCommand extends Command {
protected function execute(InputInterface $input, OutputInterface $output) {
$output->writeln('Hello from laminas-cli!');
}
}
// Register in Laravel's Service Provider (temporary)
$this->app->singleton(MyCommand::class);
// Register in laminas-cli config (config/laminas-cli.php)
return [
'laminas-cli' => [
'commands' => [
'app:my-command' => App\Console\Commands\MyCommand::class,
],
],
];
artisan has built-in helpers (e.g., migrate, queue:work) that laminas-cli lacks.artisan expects commands in app/Console/Commands/, while laminas-cli uses package:command-name.laminas-cli to a non-critical module (e.g., a background job runner).artisan for Laravel-native tasks (migrations, queues).laminas-cli for Laminas-specific commands (e.g., laminas-mvc tools).artisan with laminas-cli via a wrapper script (if justified).Console/Kernel.php in favor of Laminas config.artisan and laminas-cli requires dual documentation and dual testing.AppServiceProvider may break laminas-cli registrations.laminas-cli pulls in Laminas dependencies (e.g., laminas-cli-tools), which may conflict with Laravel’s PSR-4 autoloading.bind() vs. Laminas factories).artisan + laminas-cli).artisan list vs. ./vendor/bin/laminas).laminas-cli tutorialsHow can I help you explore Laravel packages today?