Files
crm-ms1/v4_ci4/system/Commands/Worker/WorkerInstall.php
2026-05-27 11:44:10 -04:00

139 lines
3.8 KiB
PHP

<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter 4 framework.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter\Commands\Worker;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
/**
* Install Worker Mode for FrankenPHP.
*
* This command sets up the necessary files to run CodeIgniter 4
* in FrankenPHP worker mode for improved performance.
*/
class WorkerInstall extends BaseCommand
{
protected $group = 'Worker Mode';
protected $name = 'worker:install';
protected $description = 'Install FrankenPHP worker mode by creating necessary configuration files';
protected $usage = 'worker:install [options]';
protected $options = [
'--force' => 'Overwrite existing files',
];
/**
* Template file mappings (template => destination path)
*
* @var array<string, string>
*/
private array $templates = [
'frankenphp-worker.php.tpl' => 'public/frankenphp-worker.php',
'Caddyfile.tpl' => 'Caddyfile',
];
public function run(array $params)
{
$force = array_key_exists('force', $params) || CLI::getOption('force');
CLI::write('Setting up FrankenPHP Worker Mode', 'yellow');
CLI::newLine();
helper('filesystem');
$created = [];
// Process each template
foreach ($this->templates as $template => $destination) {
$source = SYSTEMPATH . 'Commands/Worker/Views/' . $template;
$target = ROOTPATH . $destination;
$isFile = is_file($target);
// Skip if file exists and not forcing overwrite
if (! $force && $isFile) {
continue;
}
// Read template content
$content = file_get_contents($source);
if ($content === false) {
CLI::error(
"Failed to read template: {$template}",
'light_gray',
'red',
);
CLI::newLine();
return EXIT_ERROR;
}
// Write file to destination
if (! write_file($target, $content)) {
CLI::error(
'Failed to create file: ' . clean_path($target),
'light_gray',
'red',
);
CLI::newLine();
return EXIT_ERROR;
}
if ($force && $isFile) {
CLI::write(' File overwritten: ' . clean_path($target), 'yellow');
} else {
CLI::write(' File created: ' . clean_path($target), 'green');
}
$created[] = $destination;
}
// No files were created
if ($created === []) {
CLI::newLine();
CLI::write('Worker mode files already exist.', 'yellow');
CLI::write('Use --force to overwrite existing files.', 'yellow');
CLI::newLine();
return EXIT_ERROR;
}
// Success message
CLI::newLine();
CLI::write('Worker mode files created successfully!', 'green');
CLI::newLine();
$this->showNextSteps();
return EXIT_SUCCESS;
}
/**
* Display next steps to the user
*/
protected function showNextSteps(): void
{
CLI::write('Next Steps:', 'yellow');
CLI::newLine();
CLI::write('1. Start FrankenPHP:', 'white');
CLI::write(' frankenphp run', 'green');
CLI::newLine();
CLI::write('2. Test your application:', 'white');
CLI::write(' curl http://localhost:8080/', 'green');
CLI::newLine();
}
}