Viewing file: ComponentMakeCommand.php (3.35 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Foundation\Console;
use Illuminate\Console\GeneratorCommand; use Illuminate\Foundation\Inspiring; use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputOption;
class ComponentMakeCommand extends GeneratorCommand { /** * The console command name. * * @var string */ protected $name = 'make:component';
/** * The console command description. * * @var string */ protected $description = 'Create a new view component class';
/** * The type of class being generated. * * @var string */ protected $type = 'Component';
/** * Execute the console command. * * @return void */ public function handle() { if (parent::handle() === false && ! $this->option('force')) { return false; }
if (! $this->option('inline')) { $this->writeView(); } }
/** * Write the view for the component. * * @return void */ protected function writeView() { $path = $this->viewPath( str_replace('.', '/', 'components.'.$this->getView()).'.blade.php' );
if (! $this->files->isDirectory(dirname($path))) { $this->files->makeDirectory(dirname($path), 0777, true, true); }
if ($this->files->exists($path) && ! $this->option('force')) { $this->error('View already exists!');
return; }
file_put_contents( $path, '<div> <!-- '.Inspiring::quote().' --> </div>' ); }
/** * Build the class with the given name. * * @param string $name * @return string */ protected function buildClass($name) { if ($this->option('inline')) { return str_replace( 'DummyView', "<<<'blade'\n<div>\n <!-- ".Inspiring::quote()." -->\n</div>\nblade", parent::buildClass($name) ); }
return str_replace( 'DummyView', 'view(\'components.'.$this->getView().'\')', parent::buildClass($name) ); }
/** * Get the view name relative to the components directory. * * @return string view */ protected function getView() { $name = str_replace('\\', '/', $this->argument('name'));
return collect(explode('/', $name)) ->map(function ($part) { return Str::kebab($part); }) ->implode('.'); }
/** * Get the stub file for the generator. * * @return string */ protected function getStub() { return __DIR__.'/stubs/view-component.stub'; }
/** * Get the default namespace for the class. * * @param string $rootNamespace * @return string */ protected function getDefaultNamespace($rootNamespace) { return $rootNamespace.'\View\Components'; }
/** * Get the console command options. * * @return array */ protected function getOptions() { return [ ['force', null, InputOption::VALUE_NONE, 'Create the class even if the component already exists'], ['inline', null, InputOption::VALUE_NONE, 'Create a component that renders an inline view'], ]; } }
|