diff --git a/readme.md b/readme.md index 7f2f946..f0f15b9 100644 --- a/readme.md +++ b/readme.md @@ -52,17 +52,19 @@ The Illuminate/Support/helpers.php is already set-up, but you can add/remove you ### Work in progress: Model docs If you don't want to write your properties yourself, you can use the (experimental) command `ide-helper:models` to generate -phpDocs, based on table columns, relations and getters/setters. Very alpha, so please provide feedback if you want. -Docs are written to a phpfile in the root of the project, so you can move the docs to the real model. +phpDocs, based on table columns, relations and getters/setters. Still in beta, so please provide feedback if you want. +Docs are written to a phpfile (_ide_helper_models.php) in the root of the project, so you can move the docs to the real model. -For now, only models in app/models are scanned. The optional argument tells what models to use. +You can now also write the comments directly to your Model file, using the -W argument. Please make sure to backup your models, before writing the info. +It should keep the existing comments and only append new properties/methods. + +For now, only models in app/models are scanned. The optional argument tells what models to use (also outside app/models). `php artisan ide-helper:models Post,User` Note: With namespaces, uses \\ instead of \ `php artisan ide-helper:models API\\User` This creates a file with the phpDocs for each Model. You should check and change them to be more accurate. -It doesn't know if datetimes are returned as string or DateTime/Carbon, but I assume they are. Also, all relations are Eloquent|Eloquent[] by default, you can change them to the actual Model. After copying the phpdocs to your model, you can clear the file, so your IDE only uses the real source. diff --git a/src/Barryvdh/LaravelIdeHelper/ModelsCommand.php b/src/Barryvdh/LaravelIdeHelper/ModelsCommand.php index 30d619e..f01c973 100644 --- a/src/Barryvdh/LaravelIdeHelper/ModelsCommand.php +++ b/src/Barryvdh/LaravelIdeHelper/ModelsCommand.php @@ -41,6 +41,9 @@ class ModelsCommand extends Command { protected $properties = array(); protected $methods = array(); + protected $write = false; + + /** * Execute the console command. @@ -50,18 +53,22 @@ class ModelsCommand extends Command { public function fire() { $filename = $this->option('filename'); + $this->write = $this->option('write'); $model = $this->argument('model'); $content = $this->generateDocs($model); - $written = \File::put($filename, $content); - - if($written !== false){ - $this->info("Model information was written to $filename"); - }else{ - $this->error("Failed to write model information to $filename"); + if(!$this->write){ + $written = \File::put($filename, $content); + if($written !== false){ + $this->info("Model information was written to $filename"); + }else{ + $this->error("Failed to write model information to $filename"); + } } + + } @@ -87,6 +94,7 @@ class ModelsCommand extends Command { { return array( array('filename', 'F', InputOption::VALUE_OPTIONAL, 'The path to the helper file', '_ide_helper_models.php'), + array('write', 'W', InputOption::VALUE_NONE, 'Write to Model file'), ); } @@ -297,6 +305,7 @@ class ModelsCommand extends Command { $reflection = new \ReflectionClass($class); $namespace = $reflection->getNamespaceName(); + $originalDoc = $reflection->getDocComment(); $phpdoc = new DocBlock($reflection, new Context($namespace)); if(!$phpdoc->getText()){ @@ -339,10 +348,29 @@ class ModelsCommand extends Command { $phpdoc->appendTag($tag); } - $serializer = new DocBlockSerializer(1, "\t"); + $serializer = new DocBlockSerializer(); $serializer->getDocComment($phpdoc); $docComment = $serializer->getDocComment($phpdoc); + + if($this->write){ + $filename = $reflection->getFileName(); + $contents = \File::get($filename); + if($originalDoc){ + $contents = str_replace($originalDoc, $docComment, $contents); + }else{ + $needle = "class {$class}"; + $replace = "{$docComment}\nclass {$class}"; + $pos = strpos($contents,$needle); + if ($pos !== false) { + $contents = substr_replace($contents,$replace,$pos,strlen($needle)); + } + } + if(\File::put($filename, $contents)){ + $this->info('Written new phpDocBlock to '.$filename); + } + } + $output = "namespace {$namespace}{\n{$docComment}\n\tclass {$class} {}\n}\n\n"; return $output; }