This example demonstrates building a complete, production-ready CLI application with comprehensive user management, data persistence, export functionality, and advanced CLI features using WebFiori CLI.
- Building complex multi-command CLI applications
- User management system with CRUD operations
- Data persistence with JSON file storage
- Export functionality (JSON, CSV formats)
- Interactive user input and validation
- Search and filtering capabilities
- Batch operations and file processing
- Error handling and logging systems
- Configuration management
- Interactive mode for continuous operations
10-multi-command-app/
├── commands/ # Command classes
│ └── UserCommand.php # Complete user management system
├── config/ # Configuration files
│ └── app.json # Application configuration
├── data/ # Data storage and logs
│ ├── users.json # User data persistence
│ └── logs/ # Application logs
│ └── app.log # Main application log
├── AppManager.php # Core application manager
├── main.php # Application entry point
└── README.md # This documentation
# Show all available commands
php main.php help
# Show specific command help
php main.php help --command=user
# Start interactive mode
php main.php -i# List all users
php main.php user --action=list
# Create new user
php main.php user --action=create --name="John Doe" --email="john@example.com" --status=active
# Update existing user
php main.php user --action=update --id=1 --name="Jane Doe" --status=inactive
# Delete user (with confirmation)
php main.php user --action=delete --id=1
# Search users
php main.php user --action=search --search="john"
# Export users
php main.php user --action=export --format=json --file=users.json
php main.php user --action=export --format=csv --file=users.csvComplete user management system with the following actions:
list- Display all users in formatted tablecreate- Create new user with validationupdate- Update existing user by IDdelete- Delete user with confirmation promptsearch- Search users by name or emailexport- Export users to file (JSON/CSV)
--action- Action to perform (Required)--id- User ID for update/delete operations--name- User full name--email- User email address (validated)--status- User status (active/inactive)--format- Output format (table/json/csv) - Default: table--search- Search term for filtering--limit- Maximum number of results - Default: 50--batch- Enable batch mode for bulk operations--file- File path for batch operations or export
- Email must be valid email format
- Status must be 'active' or 'inactive'
- ID must exist for update/delete operations
- Name and email required for create operations
php main.php user --action=listInfo: 👥 User Management - List Users
┌──────────┬─────────────────┬────────────────────────────┬────────────┬───────────────────────┬───────────────────────┐
│ Id │ Name │ Email │ Status │ Created At │ Updated At │
├──────────┼─────────────────┼────────────────────────────┼────────────┼───────────────────────┼───────────────────────┤
│ 1 │ John Doe │ john.doe@example.com │ active │ 2024-01-15 10:30:00 │ 2024-01-15 10:30:00 │
│ 2 │ Jane Smith │ jane.smith@example.com │ active │ 2024-01-16 14:20:00 │ 2024-01-16 14:20:00 │
│ 3 │ Bob Johnson │ bob.johnson@example.com │ inactive │ 2024-01-17 09:15:00 │ 2024-01-17 09:15:00 │
└──────────┴─────────────────┴────────────────────────────┴────────────┴───────────────────────┴───────────────────────┘
Info: 📊 Total: 3 users | Active: 2 | Inactive: 1
php main.php user --action=create --name="Alice Brown" --email="alice@example.com" --status=activeSuccess: ✅ User created successfully!
Info: 👤 User Information:
• ID: 4
• Name: Alice Brown
• Email: alice@example.com
• Status: Active
• Created: 2025-09-27 19:19:41
• Updated: 2025-09-27 19:19:41
php main.php user --action=update --id=4 --name="Alice Cooper" --status=inactiveInfo: Updating user: Alice Brown (alice@example.com)
Success: ✅ User updated successfully!
Info: 👤 User Information:
• ID: 4
• Name: Alice Cooper
• Email: alice@example.com
• Status: Inactive
• Created: 2025-09-27 19:19:41
• Updated: 2025-09-27 19:19:51
php main.php user --action=search --search="john"Info: 🔍 Search Results for: 'john'
┌──────────┬─────────────────┬────────────────────────────┬────────────┬───────────────────────┬───────────────────────┐
│ Id │ Name │ Email │ Status │ Created At │ Updated At │
├──────────┼─────────────────┼────────────────────────────┼────────────┼───────────────────────┼───────────────────────┤
│ 1 │ John Doe │ john.doe@example.com │ active │ 2024-01-15 10:30:00 │ 2024-01-15 10:30:00 │
│ 3 │ Bob Johnson │ bob.johnson@example.com │ inactive │ 2024-01-17 09:15:00 │ 2024-01-17 09:15:00 │
└──────────┴─────────────────┴────────────────────────────┴────────────┴───────────────────────┴───────────────────────┘
Info: Found 2 user(s) matching 'john'
php main.php user --action=export --format=json --file=users_export.jsonInfo: 📤 Exporting 4 users to users_export.json
Success: ✅ Export completed successfully!
Info: 📋 Export Summary:
• Format: JSON
• Records: 4
• File Size: 881.0 B
• Location: users_export.json
php main.php user --action=export --format=csv --file=users_export.csvInfo: 📤 Exporting 4 users to users_export.csv
Success: ✅ Export completed successfully!
Info: 📋 Export Summary:
• Format: CSV
• Records: 4
• File Size: 422.0 B
• Location: users_export.csv
php main.php user --action=delete --id=4Warning: ⚠️ You are about to delete user: Alice Cooper (alice@example.com)
Are you sure you want to delete this user?(y/N)
Success: ✅ User deleted successfully!
php main.php user --action=list --format=jsonInfo: 👥 User Management - List Users
[
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"status": "active",
"created_at": "2024-01-15 10:30:00",
"updated_at": "2024-01-15 10:30:00"
},
{
"id": 2,
"name": "Jane Smith",
"email": "jane.smith@example.com",
"status": "active",
"created_at": "2024-01-16 14:20:00",
"updated_at": "2024-01-16 14:20:00"
}
]
Info: 📊 Total: 2 users | Active: 2 | Inactive: 0
php main.php -i>> Running in interactive mode.
>> Type command name or 'exit' to close.
>> user --action=list
Info: 👥 User Management - List Users
[Table output...]
>> exit
php main.php userError: The following required argument(s) are missing: '--action'
php main.php user --action=invalidError: The following argument(s) have invalid values: '--action'
Info: Allowed values for the argument '--action':
list
create
update
delete
search
export
php main.php user --action=update --id=999 --name="Test"Error: User with ID 999 not found.
php main.php user --action=create --name="Test User"Enter user email:
Error: Validation failed:
• Field email must be a valid email address
# Create, update, search, and delete user
php main.php user --action=create --name="Test User" --email="test@example.com" --status=active
php main.php user --action=update --id=4 --name="Updated User" --status=inactive
php main.php user --action=search --search="updated"
php main.php user --action=delete --id=4# Test different export formats
php main.php user --action=export --format=json --file=test.json
php main.php user --action=export --format=csv --file=test.csv
php main.php user --action=list --format=json
php main.php user --action=list --format=table# Test search functionality
php main.php user --action=search --search="john"
php main.php user --action=search --search="@example.com"
php main.php user --action=search --search="active"# Test interactive mode
echo -e "user --action=list\nuser --action=create --name='Interactive User' --email='interactive@example.com'\nexit" | php main.php -i# Test various error conditions
php main.php user --action=update --id=999
php main.php user --action=create --name="Test"
php main.php user --action=delete --id=999
php main.php user --action=invalid# Test batch file processing
echo '[{"name":"Batch User 1","email":"batch1@example.com","status":"active"}]' > batch.json
php main.php user --action=create --batch --file=batch.json- Multi-Command Structure: Organized command classes with clear separation
- Configuration Management: Centralized app configuration and settings
- Data Persistence: JSON-based data storage with automatic backup
- Logging System: Comprehensive application logging with timestamps
- CRUD Operations: Complete Create, Read, Update, Delete functionality
- Data Validation: Email validation, status validation, required field checks
- Search Functionality: Search by name, email, or status
- Confirmation Prompts: Safety confirmations for destructive operations
- Multiple Formats: JSON and CSV export capabilities
- File Management: Automatic file naming and size reporting
- Batch Operations: Bulk user creation from JSON files
- Data Integrity: Validation during import/export operations
- Formatted Output: Uses WebFiori CLI's built-in
table()method for consistent, professional table formatting - Interactive Input: Prompts for missing required information
- Progress Feedback: Clear success/error messages with emojis
- Help System: Comprehensive help documentation for all commands
- Interactive Mode: Continuous command execution without restart
- Format Options: Multiple output formats (table, JSON, CSV)
- Search and Filter: Advanced filtering capabilities
- Logging: Application activity logging for debugging and monitoring
UserCommand: Complete user management command with all CRUD operationsAppManager: Application lifecycle management, logging, and configurationRunner: WebFiori CLI runner with command registration and execution- Built-in
table()method: Uses WebFiori CLI's native table formatting for consistent, professional display
- JSON Files: User data stored in
data/users.json - Automatic Backup: Data persistence with atomic writes
- Schema Validation: Consistent data structure enforcement
- Migration Support: Data format versioning and upgrades
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"status": "active",
"created_at": "2024-01-15 10:30:00",
"updated_at": "2024-01-15 10:30:00"
}- JSON: Structured data with full field information
- CSV: Comma-separated values with headers
- Table: Formatted console output with borders and alignment
- Single responsibility principle for commands
- Clear command naming and structure
- Comprehensive argument validation
- Consistent error handling patterns
- Atomic file operations for data integrity
- Backup and recovery mechanisms
- Data validation and sanitization
- Consistent data format and structure
- Clear and informative output messages
- Confirmation prompts for destructive actions
- Multiple output format options
- Comprehensive help and documentation
- Graceful error recovery
- Informative error messages
- Input validation and sanitization
- Logging for debugging and monitoring
- Modular and maintainable code structure
- Comprehensive documentation
- Consistent coding standards
- Testable command implementations
- 01-basic-command - Simple command creation
- 02-command-with-args - Argument handling
- 06-table-display - Advanced table formatting
- 08-file-processing - File operations and processing
- WebFiori CLI Documentation
- Command Design Patterns
- CLI Application Best Practices
- JSON Data Management
- CSV File Format Specification php main.php config:set --key="app.debug" --value="true" php main.php config:get --key="app.name"
php main.php data:export --format=json php main.php data:import --file="backup.json" php main.php data:backup --destination="./backups/"
php main.php system:status php main.php system:cleanup php main.php system:info
### Advanced Usage
```bash
# Batch operations
php main.php user:create --batch --file="users.csv"
# Interactive mode
php main.php -i
# Verbose output
php main.php user:list --verbose
# Different output formats
php main.php user:list --format=table
php main.php user:list --format=json
php main.php user:list --format=csv
user:list- List all users with filteringuser:create- Create new usersuser:update- Update existing usersuser:delete- Delete usersuser:search- Search users by criteria
config:show- Display current configurationconfig:set- Set configuration valuesconfig:get- Get specific configuration valuesconfig:reset- Reset to default configuration
data:export- Export data in various formatsdata:import- Import data from filesdata:backup- Create data backupsdata:restore- Restore from backupsdata:validate- Validate data integrity
system:status- Show system statussystem:info- Display system informationsystem:cleanup- Clean temporary filessystem:logs- View application logs
class AppManager {
private array $config;
private string $dataPath;
private Logger $logger;
public function getConfig(string $key = null);
public function setConfig(string $key, $value);
public function loadData(string $type): array;
public function saveData(string $type, array $data);
public function log(string $level, string $message);
}abstract class BaseCommand extends Command {
protected AppManager $app;
protected function getApp(): AppManager;
protected function formatOutput(array $data, string $format);
protected function validateInput(array $rules, array $data);
protected function showProgress(callable $task, string $message);
}- JSON-based config: Structured configuration files
- Environment support: Different configs per environment
- Runtime modification: Change config via CLI
- Validation: Config value validation
- Defaults: Fallback to default values
- JSON storage: Simple file-based storage
- CRUD operations: Create, Read, Update, Delete
- Data validation: Input validation and sanitization
- Backup/Restore: Data backup and recovery
- Migration: Data structure migrations
- User CRUD: Complete user lifecycle management
- Search/Filter: Advanced user searching
- Batch operations: Bulk user operations
- Data export: Export users in multiple formats
- Validation: Email, phone, and data validation
- Multiple formats: JSON, CSV, Table, XML
- Colored output: ANSI color support
- Progress bars: Long operation progress
- Pagination: Large dataset handling
- Sorting: Configurable data sorting
- Graceful errors: User-friendly error messages
- Logging: Comprehensive error logging
- Recovery: Automatic error recovery
- Validation: Input validation with helpful messages
- Exit codes: Proper exit code handling
👥 User Management - List Users
┌────┬─────────────┬─────────────────────┬─────────────┬─────────────┐
│ ID │ Name │ Email │ Status │ Created │
├────┼─────────────┼─────────────────────┼─────────────┼─────────────┤
│ 1 │ John Doe │ john@example.com │ Active │ 2024-01-15 │
│ 2 │ Jane Smith │ jane@example.com │ Active │ 2024-01-16 │
│ 3 │ Bob Johnson │ bob@example.com │ Inactive │ 2024-01-17 │
└────┴─────────────┴─────────────────────┴─────────────┴─────────────┘
📊 Total: 3 users | Active: 2 | Inactive: 1
⚙️ Application Configuration
📱 Application Settings:
• Name: MyApp
• Version: 1.0.0
• Environment: development
• Debug: enabled
🗄️ Database Settings:
• Type: json
• Path: ./data/
• Backup: enabled
🔧 System Settings:
• Log Level: info
• Max Users: 1000
• Auto Backup: daily
🖥️ System Status Dashboard
📊 Application Health:
✅ Configuration: OK
✅ Data Storage: OK
✅ Permissions: OK
⚠️ Disk Space: 85% used
📈 Statistics:
• Total Users: 156
• Active Sessions: 12
• Uptime: 2d 14h 32m
• Memory Usage: 45.2 MB
🗂️ Storage Information:
• Data Size: 2.3 MB
• Backup Size: 1.8 MB
• Log Size: 512 KB
• Free Space: 1.2 GB
📤 Exporting Data
Preparing export...
[████████████████████████████████████████████████████] 100.0% (156/156)
✅ Export completed successfully!
📋 Export Summary:
• Format: JSON
• Records: 156 users
• File Size: 45.2 KB
• Location: ./exports/users_2024-01-20_14-30-15.json
• Duration: 00:02
The application includes comprehensive unit tests:
# Run all tests
php vendor/bin/phpunit tests/
# Run specific test suite
php vendor/bin/phpunit tests/UserCommandTest.php
# Run with coverage
php vendor/bin/phpunit --coverage-html coverage/tests/
├── UserCommandTest.php
├── ConfigCommandTest.php
├── DataCommandTest.php
├── SystemCommandTest.php
└── AppManagerTest.php
After mastering this example, explore:
- 13-database-cli - Database management tools
- Real database integration: Connect to MySQL, PostgreSQL, SQLite
- API integration: Connect to external APIs
- Web interface: Add web-based management
Extend the application:
- Add authentication: User login and permissions
- Database integration: Replace JSON with SQL database
- API integration: Connect to external APIs
- Plugin system: Add plugin support
- Web interface: Add web-based management
// Example: Add role-based permissions
class User {
public function hasPermission(string $permission): bool {
return in_array($permission, $this->permissions);
}
}
// Example: Add API integration
class ApiClient {
public function syncUsers(): array {
// Sync with external API
}
}- 01-basic-hello-world - Basic command structure
- 02-arguments-and-options - Command arguments and validation
- 03-user-input - User input and interaction
- 04-output-formatting - Professional output styling
- 05-interactive-commands - Menu-driven interfaces
- 06-table-display - Data presentation in tables
- 07-progress-bars - Visual progress feedback
- 11-masked-input - Secure input handling
- 08-file-processing - File management commands
- 09-database-ops - Database operation commands
- 12-command-scaffolding - Generate commands for your application