Compare commits

...
43 Commits
Author SHA1 Message Date
Barry vd. Heuvel 541b9508e2 Update compiled locations 2015-06-11 16:11:52 +02:00
Barry vd. Heuvel afe1fe88ba Merge pull request #222 from akshayagarwal/patch-1
Update provider include syntax for Laravel 5.1.1 LTS
2015-06-11 08:41:55 +02:00
Akshay Agarwal a59a5e1ae1 Update provider include syntax for Laravel 5.1.1 LTS 2015-06-10 21:04:26 +05:30
Barry vd. Heuvel bb3bba2c5b Catch non-existant class fatal exceptions
Add autoloader that throws an error, so we can catch errors instead of fatal crashes.
Fixes #220
2015-06-08 09:04:31 +02:00
Barry vd. Heuvel 5aa0f55d2f Update composer.json 2015-06-07 15:09:00 +02:00
Barry vd. Heuvel 89b585b242 Merge pull request #212 from modder2/modder2-patch-1
Bug fix with model relations
2015-05-15 12:26:15 +02:00
Alexander f5b1248a37 Bug fix with model relations
If relation has other methods, generating doc is fail.
E.g.
$this->belongsToMany('App\User')->withTimestamps();
generate this:
@property-read \Illuminate\Database\Eloquent\Collection|\App\User')->withTimestamps([] $drinks
2015-05-14 14:44:54 +03:00
Barry vd. Heuvel 8b190ac295 Merge pull request #211 from MrCue/master
Update ModelsCommand.php
2015-05-14 13:40:20 +02:00
MrCue a861bcaf1b Update ModelsCommand.php
Work with tables in different databases
2015-05-13 16:46:47 +01:00
Barry vd. Heuvel bb3bd2645d Merge pull request #190 from MalikinSergey/patch-1
Add Query\Builder return type to magic scope* methods
2015-05-06 12:08:42 +02:00
Barry vd. Heuvel 687a8c9b47 Merge pull request #178 from fhteam/master_custom_types_support
Custom database types support for L5 branch
2015-05-06 12:02:57 +02:00
Barry vd. Heuvel b1dedc3ee6 5.1 support 2015-05-03 16:00:11 +02:00
Barry vd. Heuvel dac46a081d Merge pull request #201 from elliotwms/patch-1
Indefinite article
2015-04-22 17:46:01 +02:00
Elliot Williams 0c38360317 Indefinite article
I'm pretty sure it should be `a helper file` as opposed to `an helper file`
2015-04-22 16:42:49 +01:00
Malikin Sergey 1d3a98f0e5 Add Query\Builder return type to magic scope* methods 2015-03-29 13:30:50 +03:00
Barry vd. Heuvel d9f79eb128 Merge pull request #188 from grrnikos/master
update readme.md
2015-03-25 21:00:56 +01:00
Nikos Gr 7ef2d2f398 update readme.md 2015-03-25 21:56:47 +02:00
Barry vd. Heuvel 5afcbdc7c8 Supress FQN warning 2015-03-17 10:13:32 +01:00
Barry vd. Heuvel d8d5517f2c Tweak @noinspection 2015-03-17 09:00:28 +01:00
Barry vd. Heuvel f518de4ae1 Filter abstracts for common errors
Fixes #184
2015-03-17 08:57:14 +01:00
Barry vd. Heuvel a89273d7ad Add non-static 2015-03-16 14:56:44 +01:00
Barry vd. Heuvel d9004f98cc Update readme 2015-03-16 14:55:13 +01:00
Barry vd. Heuvel 765a274c05 More methods 2015-03-16 14:26:28 +01:00
Barry vd. Heuvel b6a5262f3b TWeak meta methods 2015-03-16 14:14:57 +01:00
Barry vd. Heuvel d922d7e7ce Add actual command 2015-03-16 13:13:00 +01:00
Barry vd. Heuvel 89240e3ceb Add gist 2015-03-16 13:05:56 +01:00
Barry vd. Heuvel d9077b753c Note about missing classes. 2015-03-16 13:01:21 +01:00
Barry vd. Heuvel 683ed695a5 Fix views 2015-03-16 12:59:27 +01:00
Barry vd. Heuvel f8c4d4e77a Fix class imports 2015-03-16 12:52:48 +01:00
Barry vd. Heuvel b1a4494b1c Add note about meta file 2015-03-16 12:40:17 +01:00
Barry vd. Heuvel 70c06f5b37 Add meta command for phpstorm 2015-03-16 12:14:15 +01:00
Vladislav Rastrusny 8378f1bd67 Adding custom DB types support for models 2015-03-03 13:02:47 +03:00
Barry vd. Heuvel 81b7febfc6 Merge pull request #175 from robgeorgeuk/patch-1
New publish config syntax for Laravel 5
2015-02-23 16:55:54 +01:00
Rob George 208043b56f New publish config syntax for Laravel 5 2015-02-23 15:45:25 +00:00
Barry vd. Heuvel 4cd891eadc Merge pull request #169 from mattwells/master
Authenticatable Contract for User model
2015-02-17 13:55:39 +01:00
Matt Wells 7917ba911f Authenticatable Contract for User model 2015-02-17 10:54:52 +00:00
Barry vd. Heuvel 1f5e436d00 Merge pull request #167 from Flynsarmy/octoberConfig
Add support for October CMS config
2015-02-12 10:50:01 +01:00
flynsarmy fb3280eaff Add support for October CMS config 2015-02-12 19:03:29 +10:00
Barry vd. Heuvel 800ac05377 Revert
wrong branch
2015-02-07 23:18:26 +01:00
Barry vd. Heuvel 50059faa6f Add constraint
Fixes #164
2015-02-07 23:10:38 +01:00
Barry vd. Heuvel bb8d0169ba Merge pull request #162 from claar/patch-1
Bump L4 version number
2015-02-05 18:11:23 +01:00
Ben Claar fe692a4e77 Bump L4 version number 2015-02-05 11:03:19 -06:00
Barry vd. Heuvel c3a622fcc9 Rename 1.8 branch 2015-02-05 09:11:12 +01:00
10 changed files with 264 additions and 41 deletions
+4 -4
View File
@@ -11,10 +11,10 @@
],
"require": {
"php": ">=5.4.0",
"illuminate/support": "5.0.x",
"illuminate/console": "5.0.x",
"illuminate/filesystem": "5.0.x",
"phpdocumentor/reflection-docblock": "2.0.x",
"illuminate/support": "5.0.x|5.1.x",
"illuminate/console": "5.0.x|5.1.x",
"illuminate/filesystem": "5.0.x|5.1.x",
"phpdocumentor/reflection-docblock": "2.0.4",
"symfony/class-loader": "~2.3"
},
"require-dev": {
+32 -2
View File
@@ -83,7 +83,37 @@ return array(
*/
'interfaces' => array(
'\Illuminate\Auth\UserInterface' => config('auth.model', 'User'),
)
'\Illuminate\Contracts\Auth\Authenticatable' => config('auth.model', 'App\User'),
),
/*
|--------------------------------------------------------------------------
| Support for custom DB types
|--------------------------------------------------------------------------
|
| This setting allow you to map any custom database type (that you may have
| created using CREATE TYPE statement or imported using database plugin
| / extension to a Doctrine type.
|
| Each key in this array is a name of the Doctrine2 DBAL Platform. Currently valid names are:
| 'postgresql', 'db2', 'drizzle', 'mysql', 'oracle', 'sqlanywhere', 'sqlite', 'mssql'
|
| This name is returned by getName() method of the specific Doctrine/DBAL/Platforms/AbstractPlatform descendant
|
| The value of the array is an array of type mappings. Key is the name of the custom type,
| (for example, "jsonb" from Postgres 9.4) and the value is the name of the corresponding Doctrine2 type (in
| our case it is 'json_array'. Doctrine types are listed here:
| http://doctrine-dbal.readthedocs.org/en/latest/reference/types.html
|
| So to support jsonb in your models when working with Postgres, just add the following entry to the array below:
|
| "postgresql" => array(
| "jsonb" => "json_array",
| ),
|
*/
'custom_db_types' => array(
),
);
+40 -24
View File
@@ -1,67 +1,83 @@
## Laravel 5 IDE Helper Generator
[![Latest Stable Version](https://poser.pugx.org/barryvdh/laravel-ide-helper/version.png)](https://packagist.org/packages/barryvdh/laravel-ide-helper) [![Total Downloads](https://poser.pugx.org/barryvdh/laravel-ide-helper/d/total.png)](https://packagist.org/packages/barryvdh/laravel-ide-helper)
### For Laravel 4.x, check [version 1.x](https://github.com/barryvdh/laravel-ide-helper/tree/v1.x)
### For Laravel 4.x, check [version 1.11](https://github.com/barryvdh/laravel-ide-helper/tree/1.11)
### Complete phpDocs, directly from the source
_Checkout [this Laracasts video](https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/15) for a quick introduction/explanation!_
This packages generates a file that your IDE can understand, so it can provide accurate autocompletion. Generation is done, based on the files in your project, so they are alway up-to-date.
If you don't want to generate it, you can add a pre-generated file to the root folder of your laravel project. (But this isn't as up-to-date as self generated files)
This package generates a file that your IDE understands, so it can provide accurate autocompletion. Generation is done based on the files in your project, so they are always up-to-date.
If you don't want to generate it, you can add a pre-generated file to the root folder of your Laravel project (but this isn't as up-to-date as self generated files).
* Generated version: https://gist.github.com/barryvdh/5227822
Note: You do need CodeIntel for Sublime Text: https://github.com/SublimeCodeIntel/SublimeCodeIntel
### New: PhpStorm Meta for Container instances
It's possible to generate a PhpStorm meta file, to [add support for factory design pattern](https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata). For Laravel, this means we can make PhpStorm understand what kind of object we are resolving from the IoC Container. For example, `events` will return an `Illuminate\Events\Dispatcher` object, so with the meta file you can call `app('events')` and it will autocomplete the Dispatcher methods.
php artisan ide-helper:meta
app('events')->fire();
\App::make('events')->fire();
/** @var \Illuminate\Foundation\Application $app */
$app->make('events')->fire();
Pre-generated example: https://gist.github.com/barryvdh/bb6ffc5d11e0a75dba67
> Note: You might need to restart PhpStorm and make sure `.phpstorm.meta.php` is indexed.
> Note: When you receive a FatalException about a class that is not found, check your config (for example, remove S3 as cloud driver when you don't have S3 configured. Remove Redis ServiceProvider when you don't use it).
### Automatic phpDoc generation for Laravel Facades
Require this package with composer using the following command:
composer require barryvdh/laravel-ide-helper
After updating composer, add the ServiceProvider to the providers array in config/app.php
After updating composer, add the service provider to the `providers` array in `config/app.php`
'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
You can now re-generate the docs yourself (for future updates) in artisan
You can now re-generate the docs yourself (for future updates)
php artisan ide-helper:generate
Note: bootstrap/compiled.php has to be cleared first, so run `php artisan clear-compiled` before generating (and `php artisan optimize` after..)
Note: `bootstrap/compiled.php` has to be cleared first, so run `php artisan clear-compiled` before generating (and `php artisan optimize` after).
You can configure your composer.json to do this after each commit:
"scripts":{
"post-update-cmd":[
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan ide-helper:generate",
"php artisan optimize"
]
},
You can also publish the config-file to change implementations (ie. interface to specific class) or set defaults for --helpers or --sublime.
You can also publish the config file to change implementations (ie. interface to specific class) or set defaults for `--helpers` or `--sublime`.
php artisan config:publish barryvdh/laravel-ide-helper
php artisan vendor:publish --provider=barryvdh/laravel-ide-helper --tag=config
The generator tries to identify the real class, but if it cannot be found, you can define it in the config file.
Some classes need a working database connection. If you do not have a working default connection, some facades will not be included.
You can use a in-memory sqlite driver, using the -M option.
Some classes need a working database connection. If you do not have a default working connection, some facades will not be included.
You can use an in-memory SQLite driver, using the -M option.
You can choose to include helper files. This is not enabled by default, but you can override this with the --helpers (-H) option.
The Illuminate/Support/helpers.php is already set-up, but you can add/remove your own files in the config file.
You can choose to include helper files. This is not enabled by default, but you can override it with the `--helpers (-H)` option.
The `Illuminate/Support/helpers.php` is already set-up, but you can add/remove your own files in the config file.
### Automatic phpDocs for models
### Automatic phpDocs for Models
> You need to require `doctrine/dbal: ~2.3` in your own composer.json to get database columns.
> You need to require `doctrine/dbal: ~2.3` in your own composer.json to get database columns.
If you don't want to write your properties yourself, you can use the command `ide-helper:models` to generate
phpDocs, based on table columns, relations and getters/setters. You can write the comments directly to your Model file, using the `--write (-W)` option. By default, you are asked to overwrite or write to a separate file (\_ide\_helper\_models.php) (You can force No with `--nowrite (-N)`).
If you don't want to write your properties yourself, you can use the command `php artisan ide-helper:models` to generate
phpDocs, based on table columns, relations and getters/setters. You can write the comments directly to your Model file, using the `--write (-W)` option. By default, you are asked to overwrite or write to a separate file (`_ide_helper_models.php`). You can force No with `--nowrite (-N)`.
Please make sure to backup your models, before writing the info.
It should keep the existing comments and only append new properties/methods. The existing phpdoc is replaced, or added if not found.
With the `--reset (-R)` option, the existing phpdocs are ignored, only the newly found columns/relations are saved as phpdocs.
With the `--reset (-R)` option, the existing phpdocs are ignored, and only the newly found columns/relations are saved as phpdocs.
php artisan ide-helper:models Post
@@ -78,17 +94,17 @@ With the `--reset (-R)` option, the existing phpdocs are ignored, only the newly
* @property-read \Illuminate\Database\Eloquent\Collection|\Comment[] $comments
*/
By default, models in app/models are scanned. The optional argument tells what models to use (also outside app/models).
By default, 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
You can also scan a different directory, using the --dir option (relative from the base path):
You can also scan a different directory, using the `--dir` option (relative from the base path):
php artisan ide-helper:models --dir="path/to/models" --dir="app/src/Model"
You can publish the config file (`php artisan vendor:publish`) and set the default directories.
Models can be ignored using the --ignore (-I) option
Models can be ignored using the `--ignore (-I)` option
php artisan ide-helper:models --ignore="Post,User"
+1 -1
View File
@@ -1,7 +1,7 @@
<?= '<?php' ?>
/**
* An helper file for Laravel 5, to provide autocomplete information to your IDE
* A helper file for Laravel 5, to provide autocomplete information to your IDE
* Generated for Laravel <?= $version ?> on <?= date("Y-m-d") ?>.
*
* @author Barry vd. Heuvel <[email protected]>
+22
View File
@@ -0,0 +1,22 @@
<?= '<?php' ?> namespace PHPSTORM_META {
/**
* PhpStorm Meta file, to provide autocomplete information for PhpStorm
* Generated on <?= date("Y-m-d") ?>.
*
* @author Barry vd. Heuvel <[email protected]>
* @see https://github.com/barryvdh/laravel-ide-helper
*/
/** @noinspection PhpIllegalArrayKeyTypeInspection */
/** @noinspection PhpUnusedLocalVariableInspection */
/** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */
$STATIC_METHOD_TYPES = [
<?php foreach($methods as $method): ?>
<?= $method ?>('') => [
<?php foreach($bindings as $abstract => $class): ?>
'<?= $abstract ?>' instanceof \<?= $class ?>,
<?php endforeach ?> ],
<?php endforeach ?>
];
}
+5 -3
View File
@@ -59,7 +59,7 @@ class GeneratorCommand extends Command
* @param \Illuminate\View\Factory $view
*/
public function __construct(
ConfigRepository $config,
/*ConfigRepository */ $config,
Filesystem $files, /* Illuminate\View\Factory */
$view
) {
@@ -76,9 +76,11 @@ class GeneratorCommand extends Command
*/
public function fire()
{
if (file_exists($compiled = base_path() . '/bootstrap/compiled.php')) {
if (file_exists(base_path() . '/vendor/compiled.php') ||
file_exists(base_path() . '/bootstrap/cache/compiled.php') ||
file_exists(base_path() . '/storage/framework/compiled.php')) {
$this->error(
'Error generating IDE Helper: first delete bootstrap/compiled.php (php artisan clear-compiled)'
'Error generating IDE Helper: first delete your compiled file (php artisan clear-compiled)'
);
} else {
$filename = $this->argument('filename');
+134
View File
@@ -0,0 +1,134 @@
<?php
/**
* Laravel IDE Helper Generator
*
* @author Barry vd. Heuvel <[email protected]>
* @copyright 2015 Barry vd. Heuvel / Fruitcake Studio (http://www.fruitcakestudio.nl)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link https://github.com/barryvdh/laravel-ide-helper
*/
namespace Barryvdh\LaravelIdeHelper\Console;
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
/**
* A command to generate phpstorm meta data
*
* @author Barry vd. Heuvel <[email protected]>
*/
class MetaCommand extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'ide-helper:meta';
protected $filename = '.phpstorm.meta.php';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Generate metadata for PhpStorm';
/** @var \Illuminate\Contracts\Filesystem\Filesystem */
protected $files;
/** @var \Illuminate\Contracts\View\Factory */
protected $view;
protected $methods = [
'\Illuminate\Foundation\Application::make',
'\Illuminate\Contracts\Foundation\Application::make',
'\Illuminate\Contracts\Container\Container::make',
'\Illuminate\Container\Container::make',
'\App::make',
'app',
];
/**
*
* @param \Illuminate\Contracts\Filesystem\Filesystem $files
* @param \Illuminate\Contracts\View\Factory $view
*/
public function __construct($files, $view) {
$this->files = $files;
$this->view = $view;
parent::__construct();
}
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
$this->registerClassAutoloadExceptions();
$bindings = array();
foreach ($this->getAbstracts() as $abstract) {
try {
$concrete = $this->laravel->make($abstract);
if (is_object($concrete)) {
$bindings[$abstract] = get_class($concrete);
}
}catch (\Exception $e) {
$this->comment("Cannot make '$abstract': ".$e->getMessage());
}
}
$content = $this->view->make('ide-helper::meta', [
'bindings' => $bindings,
'methods' => $this->methods,
])->render();
$filename = $this->option('filename');
$written = $this->files->put($filename, $content);
if ($written !== false) {
$this->info("A new meta file was written to $filename");
} else {
$this->error("The meta file could not be created at $filename");
}
}
/**
* Get a list of abstracts from the Laravel Application.
*
* @return array
*/
protected function getAbstracts()
{
$abstracts = $this->laravel->getBindings();
// Return the abstract names only
return array_keys($abstracts);
}
/**
* Register an autoloader the throws exceptions when a class is not found.
*/
protected function registerClassAutoloadExceptions()
{
spl_autoload_register(function ($class) {
throw new \Exception("Class '$class' not found.");
});
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
array('filename', 'F', InputOption::VALUE_OPTIONAL, 'The path to the meta file', $this->filename),
);
}
}
+16 -4
View File
@@ -217,9 +217,21 @@ class ModelsCommand extends Command
{
$table = $model->getConnection()->getTablePrefix() . $model->getTable();
$schema = $model->getConnection()->getDoctrineSchemaManager($table);
$schema->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
$databasePlatform = $schema->getDatabasePlatform();
$databasePlatform->registerDoctrineTypeMapping('enum', 'string');
$columns = $schema->listTableColumns($table);
$platformName = $databasePlatform->getName();
$customTypes = $this->laravel['config']->get("ide-helper.custom_db_types.{$platformName}", array());
foreach ($customTypes as $yourTypeName => $doctrineTypeName) {
$databasePlatform->registerDoctrineTypeMapping($yourTypeName, $doctrineTypeName);
}
$database = null;
if (strpos($table, '.')) {
list($database, $table) = explode('.', $table);
}
$columns = $schema->listTableColumns($table, $database);
if ($columns) {
foreach ($columns as $column) {
@@ -303,7 +315,7 @@ class ModelsCommand extends Command
$args = $this->getParameters($reflection);
//Remove the first ($query) argument
array_shift($args);
$this->setMethod($name, '\\' . $reflection->class, $args);
$this->setMethod($name, '\Illuminate\Database\Query\Builder|\\' . $reflection->class, $args);
}
} elseif (!method_exists('Eloquent', $method) && !Str::startsWith($method, 'get')) {
@@ -333,7 +345,7 @@ class ModelsCommand extends Command
$search = '$this->' . $relation . '(';
if ($pos = stripos($code, $search)) {
$code = substr($code, $pos + strlen($search));
$arguments = explode(',', substr($code, 0, strpos($code, ');')));
$arguments = explode(',', substr($code, 0, strpos($code, ')')));
//Remove quotes, ensure 1 \ in front of the model
$returnModel = $this->getClassName($arguments[0], $model);
if ($relation === "belongsToMany" or $relation === 'hasMany' or $relation === 'morphMany' or $relation === 'morphToMany') {
+1 -1
View File
@@ -36,7 +36,7 @@ class Generator
* @param \Symfony\Component\Console\Output\OutputInterface $output
* @param string $helpers
*/
public function __construct(ConfigRepository $config,
public function __construct(/*ConfigRepository */ $config,
/* Illuminate\View\Factory */ $view,
OutputInterface $output = null,
$helpers = ''
+9 -2
View File
@@ -11,8 +11,9 @@
namespace Barryvdh\LaravelIdeHelper;
use Illuminate\Support\ServiceProvider;
use Barryvdh\LaravelIdeHelper\Console\GeneratorCommand;
use Barryvdh\LaravelIdeHelper\Console\MetaCommand;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Console\GeneratorCommand;
class IdeHelperServiceProvider extends ServiceProvider
{
@@ -59,8 +60,14 @@ class IdeHelperServiceProvider extends ServiceProvider
return new ModelsCommand();
}
);
$this->app['command.ide-helper.meta'] = $this->app->share(
function ($app) {
return new MetaCommand($app['files'], $app['view']);
}
);
$this->commands('command.ide-helper.generate', 'command.ide-helper.models');
$this->commands('command.ide-helper.generate', 'command.ide-helper.models', 'command.ide-helper.meta');
}
/**