-
-
Save krisanalfa/0407dd822f2888226f45 to your computer and use it in GitHub Desktop.
| <?php | |
| namespace App\Console\Commands; | |
| use Illuminate\Support\Str; | |
| use Illuminate\Console\Command; | |
| use Symfony\Component\Console\Input\InputOption; | |
| class KeyGenerateCommand extends Command | |
| { | |
| /** | |
| * The console command name. | |
| * | |
| * @var string | |
| */ | |
| protected $name = 'key:generate'; | |
| /** | |
| * The console command description. | |
| * | |
| * @var string | |
| */ | |
| protected $description = "Set the application key"; | |
| /** | |
| * Execute the console command. | |
| * | |
| * @return void | |
| */ | |
| public function fire() | |
| { | |
| $key = $this->getRandomKey(); | |
| if ($this->option('show')) { | |
| return $this->line('<comment>'.$key.'</comment>'); | |
| } | |
| $path = base_path('.env'); | |
| if (file_exists($path)) { | |
| file_put_contents( | |
| $path, | |
| str_replace(env('APP_KEY'), $key, file_get_contents($path)) | |
| ); | |
| } | |
| $this->info("Application key [$key] set successfully."); | |
| } | |
| /** | |
| * Generate a random key for the application. | |
| * | |
| * @return string | |
| */ | |
| protected function getRandomKey() | |
| { | |
| return Str::random(32); | |
| } | |
| /** | |
| * Get the console command options. | |
| * | |
| * @return array | |
| */ | |
| protected function getOptions() | |
| { | |
| return array( | |
| array('show', null, InputOption::VALUE_NONE, 'Simply display the key instead of modifying files.'), | |
| ); | |
| } | |
| } |
I think you should change from fire to handle function. Because Abstract class Command has execute method will detect handle or __invoke. For anyone face issue
Method App\Console\Commands\KeyGenerateCommand::__invoke() does not exist
Just change fire to handle will resolve the problem. Hope this help
this is my code and this support APP_KEY for laravel encryption AES-256-CBC.
i use this in my Lumen 8 project, hope this work for you guys :)<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Console\ConfirmableTrait; class KeyGenerateCommand extends Command { use ConfirmableTrait; protected $signature = 'key:generate {--show : Display the key instead of modifying files} {--force : Force the operation to run when in production}'; protected $description = 'Set the application key'; public function handle() { $key = $this->generateRandomKey(); if ($this->option('show')) { return $this->line('<comment>' . $key . '</comment>'); } if (!$this->setKeyInEnvironmentFile($key)) { return; } $this->laravel['config']['app.key'] = $key; $this->info("Application key [$key] set successfully."); } protected function generateRandomKey() { return 'base64:' . base64_encode(random_bytes( $this->laravel['config']['app.cipher'] == 'AES-128-CBC' ? 16 : 32 )); } protected function setKeyInEnvironmentFile($key) { $currentKey = $this->laravel['config']['app.key'] ?: env('APP_KEY'); if (strlen($currentKey) !== 0 && (!$this->confirmToProceed())) { return false; } $this->writeNewEnvironmentFileWith($key); return true; } protected function writeNewEnvironmentFileWith($key) { file_put_contents($this->laravel->basePath('.env'), preg_replace( $this->keyReplacementPattern($key), 'APP_KEY=' . $key, file_get_contents($this->laravel->basePath('.env')) )); } protected function keyReplacementPattern() { $currentKey = $this->laravel['config']['app.key'] ?: env('APP_KEY'); $escaped = preg_quote('=' . $currentKey, '/'); return "/^APP_KEY{$escaped}/m"; } }
Cheerio! I confirm this works with the latest version of lumen(8.0).
I think you should change from fire to handle function. Because Abstract class Command has execute method will detect handle or __invoke. For anyone face issue
Method App\Console\Commands\KeyGenerateCommand::__invoke() does not existJust change fire to handle will resolve the problem. Hope this help
Aye. I confirm that he is right. This solves Method App\Console\Commands\KeyGenerateCommand::__invoke() does not exist.
@frama21 Your solution works well but I had to update this section:
if ($this->option('show')) {
return $this->line('<comment>' . $key . '</comment>');
}
to
if ($this->option('show')) {
$this->line('<comment>' . $key . '</comment>');
}
this is my code and this support APP_KEY for laravel encryption AES-256-CBC.
i use this in my Lumen 8 project, hope this work for you guys :)