Revision 399 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Foundation\Console;use Illuminate\Console\GeneratorCommand;use InvalidArgumentException;use Symfony\Component\Console\Attribute\AsCommand;use Symfony\Component\Console\Input\InputInterface;use Symfony\Component\Console\Input\InputOption;use Symfony\Component\Console\Output\OutputInterface;#[AsCommand(name: 'make:observer')]class ObserverMakeCommand extends GeneratorCommand{/*** The console command name.** @var string*/protected $name = 'make:observer';/*** The name of the console command.** This name is used to identify the command during lazy loading.** @var string|null** @deprecated*/protected static $defaultName = 'make:observer';/*** The console command description.** @var string*/protected $description = 'Create a new observer class';/*** The type of class being generated.** @var string*/protected $type = 'Observer';/*** Build the class with the given name.** @param string $name* @return string*/protected function buildClass($name){$stub = parent::buildClass($name);$model = $this->option('model');return $model ? $this->replaceModel($stub, $model) : $stub;}/*** Replace the model for the given stub.** @param string $stub* @param string $model* @return string*/protected function replaceModel($stub, $model){$modelClass = $this->parseModel($model);$replace = ['DummyFullModelClass' => $modelClass,'{{ namespacedModel }}' => $modelClass,'{{namespacedModel}}' => $modelClass,'DummyModelClass' => class_basename($modelClass),'{{ model }}' => class_basename($modelClass),'{{model}}' => class_basename($modelClass),'DummyModelVariable' => lcfirst(class_basename($modelClass)),'{{ modelVariable }}' => lcfirst(class_basename($modelClass)),'{{modelVariable}}' => lcfirst(class_basename($modelClass)),];return str_replace(array_keys($replace), array_values($replace), $stub);}/*** Get the fully-qualified model class name.** @param string $model* @return string** @throws \InvalidArgumentException*/protected function parseModel($model){if (preg_match('([^A-Za-z0-9_/\\\\])', $model)) {throw new InvalidArgumentException('Model name contains invalid characters.');}return $this->qualifyModel($model);}/*** Get the stub file for the generator.** @return string*/protected function getStub(){return $this->option('model')? $this->resolveStubPath('/stubs/observer.stub'): $this->resolveStubPath('/stubs/observer.plain.stub');}/*** Resolve the fully-qualified path to the stub.** @param string $stub* @return string*/protected function resolveStubPath($stub){return file_exists($customPath = $this->laravel->basePath(trim($stub, '/')))? $customPath: __DIR__.$stub;}/*** Get the default namespace for the class.** @param string $rootNamespace* @return string*/protected function getDefaultNamespace($rootNamespace){return $rootNamespace.'\Observers';}/*** Get the console command arguments.** @return array*/protected function getOptions(){return [['force', 'f', InputOption::VALUE_NONE, 'Create the class even if the observer already exists'],['model', 'm', InputOption::VALUE_OPTIONAL, 'The model that the observer applies to'],];}/*** Interact further with the user if they were prompted for missing arguments.** @param \Symfony\Component\Console\Input\InputInterface $input* @param \Symfony\Component\Console\Output\OutputInterface $output* @return void*/protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output){if ($this->isReservedName($this->getNameInput()) || $this->didReceiveOptions($input)) {return;}$model = $this->components->askWithCompletion('What model should this observer apply to?',$this->possibleModels(),'none');if ($model && $model !== 'none') {$input->setOption('model', $model);}}}