mirror of
https://github.com/ZorgCC/lumen-generators.git
synced 2024-12-26 14:05:29 +03:00
wn:resources not generating pivot tables bug fixed
This commit is contained in:
parent
714d11efd8
commit
b743670470
3
.gitignore
vendored
3
.gitignore
vendored
@ -3,3 +3,6 @@
|
|||||||
*.sublime-*
|
*.sublime-*
|
||||||
|
|
||||||
tests/_output/*
|
tests/_output/*
|
||||||
|
|
||||||
|
lumen-test/app/
|
||||||
|
lumen-test/database/
|
@ -28,7 +28,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rules",
|
"rules",
|
||||||
"tags[]"
|
"tags[]",
|
||||||
|
{
|
||||||
|
"name": "factory",
|
||||||
|
"type": "string",
|
||||||
|
"default": false
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
3
lumen-test/.gitignore
vendored
3
lumen-test/.gitignore
vendored
@ -4,3 +4,6 @@
|
|||||||
tests/_output/*
|
tests/_output/*
|
||||||
|
|
||||||
composer.lock
|
composer.lock
|
||||||
|
|
||||||
|
lumen-test/app
|
||||||
|
lumen-test/database
|
@ -1,29 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Console;
|
|
||||||
|
|
||||||
use Illuminate\Console\Scheduling\Schedule;
|
|
||||||
use Laravel\Lumen\Console\Kernel as ConsoleKernel;
|
|
||||||
|
|
||||||
class Kernel extends ConsoleKernel
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The Artisan commands provided by your application.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $commands = [
|
|
||||||
//
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the application's command schedule.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function schedule(Schedule $schedule)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Events;
|
|
||||||
|
|
||||||
use Illuminate\Queue\SerializesModels;
|
|
||||||
|
|
||||||
abstract class Event
|
|
||||||
{
|
|
||||||
use SerializesModels;
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Exceptions;
|
|
||||||
|
|
||||||
use Exception;
|
|
||||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
|
||||||
use Laravel\Lumen\Exceptions\Handler as ExceptionHandler;
|
|
||||||
|
|
||||||
class Handler extends ExceptionHandler
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* A list of the exception types that should not be reported.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $dontReport = [
|
|
||||||
HttpException::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Report or log an exception.
|
|
||||||
*
|
|
||||||
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
|
|
||||||
*
|
|
||||||
* @param \Exception $e
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function report(Exception $e)
|
|
||||||
{
|
|
||||||
return parent::report($e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render an exception into an HTTP response.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param \Exception $e
|
|
||||||
* @return \Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function render($request, Exception $e)
|
|
||||||
{
|
|
||||||
return parent::render($request, $e);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use Laravel\Lumen\Routing\Controller as BaseController;
|
|
||||||
|
|
||||||
class Controller extends BaseController
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Closure;
|
|
||||||
|
|
||||||
class ExampleMiddleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Handle an incoming request.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param \Closure $next
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function handle($request, Closure $next)
|
|
||||||
{
|
|
||||||
return $next($request);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Application Routes
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here is where you can register all of the routes for an application.
|
|
||||||
| It is a breeze. Simply tell Lumen the URIs it should respond to
|
|
||||||
| and give it the Closure to call when that URI is requested.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
$app->get("/", function () use ($app) {
|
|
||||||
return $app->welcome();
|
|
||||||
});
|
|
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Jobs;
|
|
||||||
|
|
||||||
use Illuminate\Bus\Queueable;
|
|
||||||
use Illuminate\Queue\SerializesModels;
|
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
|
||||||
use Illuminate\Contracts\Bus\SelfHandling;
|
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
||||||
|
|
||||||
abstract class Job implements SelfHandling, ShouldQueue
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Queueable Jobs
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This job base class provides a central location to place any logic that
|
|
||||||
| is shared across all of your jobs. The trait included with the class
|
|
||||||
| provides access to the "queueOn" and "delay" queue helper methods.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
use InteractsWithQueue, Queueable, SerializesModels;
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Listeners;
|
|
||||||
|
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
||||||
|
|
||||||
abstract class Listener
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Register any application services.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function register()
|
|
||||||
{
|
|
||||||
// Adding providers for local development
|
|
||||||
$this->app->register('Wn\Generators\CommandsServiceProvider');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
|
||||||
|
|
||||||
class EventServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The event listener mappings for the application.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $listen = [
|
|
||||||
'App\Events\SomeEvent' => [
|
|
||||||
'App\Listeners\EventListener',
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
require_once __DIR__.'/../vendor/autoload.php';
|
require_once __DIR__.'/../vendor/autoload.php';
|
||||||
|
|
||||||
// Dotenv::load(__DIR__.'/../');
|
Dotenv::load(__DIR__.'/../');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Model Factories
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here you may define all of your model factories. Model factories give
|
|
||||||
| you a convenient way to create models for testing and seeding your
|
|
||||||
| database. Just tell the factory how a default model should look.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
$factory->define(App\User::class, function ($faker) {
|
|
||||||
return [
|
|
||||||
'name' => $faker->name,
|
|
||||||
'email' => $faker->email,
|
|
||||||
'password' => str_random(10),
|
|
||||||
'remember_token' => str_random(10),
|
|
||||||
];
|
|
||||||
});
|
|
@ -2,7 +2,7 @@
|
|||||||
$I = new AcceptanceTester($scenario);
|
$I = new AcceptanceTester($scenario);
|
||||||
|
|
||||||
$I->wantTo('generate a RESTful resource');
|
$I->wantTo('generate a RESTful resource');
|
||||||
$I->runShellCommand('php artisan wn:resource task_category "name;string:unique;requied;fillable descr;text:nullable;;fillable project_id;integer;required;key,fillable due;timestamp;;fillable,date" --has-many="tags,tasks" --belongs-to="project,creator:User" --migration-file=create_task_categories');
|
$I->runShellCommand('php artisan wn:resource task_category "name;string:unique;requied;fillable;word descr;text:nullable;;fillable;paragraph project_id;integer;required;key,fillable due;timestamp;;fillable,date;date" --has-many="tags,tasks" --belongs-to="project,creator:User" --migration-file=create_task_categories');
|
||||||
|
|
||||||
// Checking the model
|
// Checking the model
|
||||||
$I->seeInShellOutput('TaskCategory model generated');
|
$I->seeInShellOutput('TaskCategory model generated');
|
||||||
@ -103,3 +103,39 @@ $app->get("/", function () use ($app) {
|
|||||||
return $app->welcome();
|
return $app->welcome();
|
||||||
});
|
});
|
||||||
');
|
');
|
||||||
|
|
||||||
|
// Checking model factory
|
||||||
|
$I->openFile('./database/factories/ModelFactory.php');
|
||||||
|
$I->seeInThisFile("
|
||||||
|
/**
|
||||||
|
* Factory definition for model App\TaskCategory.
|
||||||
|
*/
|
||||||
|
\$factory->define(App\TaskCategory::class, function (\$faker) {
|
||||||
|
return [
|
||||||
|
'name' => \$faker->word,
|
||||||
|
'descr' => \$faker->paragraph,
|
||||||
|
'due' => \$faker->date,
|
||||||
|
];
|
||||||
|
});");
|
||||||
|
$I->writeToFile('./database/factories/ModelFactory.php', "<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Model Factories
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here you may define all of your model factories. Model factories give
|
||||||
|
| you a convenient way to create models for testing and seeding your
|
||||||
|
| database. Just tell the factory how a default model should look.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
\$factory->define(App\User::class, function (\$faker) {
|
||||||
|
return [
|
||||||
|
'name' => \$faker->name,
|
||||||
|
'email' => \$faker->email,
|
||||||
|
'password' => str_random(10),
|
||||||
|
'remember_token' => str_random(10),
|
||||||
|
];
|
||||||
|
});
|
||||||
|
");
|
@ -47,7 +47,9 @@ class FactoryCommand extends BaseCommand {
|
|||||||
$fields = $this->option('fields');
|
$fields = $this->option('fields');
|
||||||
|
|
||||||
if($fields){
|
if($fields){
|
||||||
|
if(! $this->option('parsed')){
|
||||||
$fields = $this->getArgumentParser('factory-fields')->parse($fields);
|
$fields = $this->getArgumentParser('factory-fields')->parse($fields);
|
||||||
|
}
|
||||||
$template = $this->getTemplate('factory/field');
|
$template = $this->getTemplate('factory/field');
|
||||||
foreach($fields as $field){
|
foreach($fields as $field){
|
||||||
$content[] = $template->with($field)->get();
|
$content[] = $template->with($field)->get();
|
||||||
|
@ -49,7 +49,7 @@ class ResourceCommand extends BaseCommand {
|
|||||||
'--parsed' => true
|
'--parsed' => true
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// generation REST actions trait if doesn't exist
|
// generating REST actions trait if doesn't exist
|
||||||
if(! $this->fs->exists('./app/Http/Controllers/RESTActions.php')){
|
if(! $this->fs->exists('./app/Http/Controllers/RESTActions.php')){
|
||||||
$this->call('wn:controller:rest-actions');
|
$this->call('wn:controller:rest-actions');
|
||||||
}
|
}
|
||||||
@ -60,6 +60,13 @@ class ResourceCommand extends BaseCommand {
|
|||||||
'--no-routes' => false
|
'--no-routes' => false
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// generating model factory
|
||||||
|
$this->call('wn:factory', [
|
||||||
|
'model' => 'App\\' . $modelName,
|
||||||
|
'--fields' => $this->factoryFields(),
|
||||||
|
'--parsed' => true
|
||||||
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function parseFields()
|
protected function parseFields()
|
||||||
@ -121,4 +128,16 @@ class ResourceCommand extends BaseCommand {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function factoryFields()
|
||||||
|
{
|
||||||
|
return array_map(function($field){
|
||||||
|
return [
|
||||||
|
'name' => $field['name'],
|
||||||
|
'type' => $field['factory']
|
||||||
|
];
|
||||||
|
}, array_filter($this->fields, function($field){
|
||||||
|
return isset($field['factory']) && $field['factory'];
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,19 +30,21 @@ class ResourcesCommand extends BaseCommand {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->call('migrate');
|
||||||
|
|
||||||
$this->pivotTables = array_map(
|
$this->pivotTables = array_map(
|
||||||
'unserialize',
|
'unserialize',
|
||||||
array_unique(array_map('serialize', $this->pivotTables))
|
array_unique(array_map('serialize', $this->pivotTables))
|
||||||
);
|
);
|
||||||
|
|
||||||
dd($this->pivotTables);
|
|
||||||
|
|
||||||
foreach ($this->pivotTables as $tables) {
|
foreach ($this->pivotTables as $tables) {
|
||||||
$this->call('wn:pivot-table', [
|
$this->call('wn:pivot-table', [
|
||||||
'model1' => $tables[0],
|
'model1' => $tables[0],
|
||||||
'model2' => $tables[1]
|
'model2' => $tables[1]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->call('migrate');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getResourceParams($modelName, $i)
|
protected function getResourceParams($modelName, $i)
|
||||||
@ -111,7 +113,13 @@ class ResourcesCommand extends BaseCommand {
|
|||||||
$rules = (isset($field['rules'])) ? trim($field['rules']) : '';
|
$rules = (isset($field['rules'])) ? trim($field['rules']) : '';
|
||||||
$tags = $this->convertArray($field['tags'], ' ', ',');
|
$tags = $this->convertArray($field['tags'], ' ', ',');
|
||||||
|
|
||||||
return "{$name};{$schema};{$rules};{$tags}";
|
$string = "{$name};{$schema};{$rules};{$tags}";
|
||||||
|
|
||||||
|
if($field['factory']){
|
||||||
|
$string .= ';' . $field['factory'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function convertArray($list, $old, $new)
|
protected function convertArray($list, $old, $new)
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Comming Soon
|
|
||||||
*/
|
|
64
src/Commands/SeederCommand.php
Normal file
64
src/Commands/SeederCommand.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?php namespace Wn\Generators\Commands;
|
||||||
|
|
||||||
|
|
||||||
|
class SeederCommand extends BaseCommand {
|
||||||
|
|
||||||
|
protected $signature = 'wn:seeder
|
||||||
|
{model : full qualified name of the model.}
|
||||||
|
{--cout=10 : number of elements to add in database.}
|
||||||
|
';
|
||||||
|
|
||||||
|
protected $description = 'Generates a model factory';
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$model = $this->argument('model');
|
||||||
|
|
||||||
|
$file = $this->getFile();
|
||||||
|
|
||||||
|
$content = $this->fs->get($file);
|
||||||
|
|
||||||
|
$content .= $this->getTemplate('factory')
|
||||||
|
->with([
|
||||||
|
'model' => $model,
|
||||||
|
'factory_fields' => $this->getFieldsContent()
|
||||||
|
])
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$this->save($content, $file);
|
||||||
|
|
||||||
|
$this->info("{$model} factory generated !");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFile()
|
||||||
|
{
|
||||||
|
$file = $this->option('file');
|
||||||
|
if(! $file){
|
||||||
|
$file = './database/factories/ModelFactory.php';
|
||||||
|
}
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFieldsContent()
|
||||||
|
{
|
||||||
|
$content = [];
|
||||||
|
|
||||||
|
$fields = $this->option('fields');
|
||||||
|
|
||||||
|
if($fields){
|
||||||
|
if(! $this->option('parsed')){
|
||||||
|
$fields = $this->getArgumentParser('factory-fields')->parse($fields);
|
||||||
|
}
|
||||||
|
$template = $this->getTemplate('factory/field');
|
||||||
|
foreach($fields as $field){
|
||||||
|
$content[] = $template->with($field)->get();
|
||||||
|
}
|
||||||
|
$content = implode(PHP_EOL, $content);
|
||||||
|
} else {
|
||||||
|
$content = "\t\t// Fields here";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -15,7 +15,7 @@ class CommandsServiceProvider extends ServiceProvider
|
|||||||
$this->registerResourceCommand();
|
$this->registerResourceCommand();
|
||||||
$this->registerResourcesCommand();
|
$this->registerResourcesCommand();
|
||||||
$this->registerPivotTableCommand();
|
$this->registerPivotTableCommand();
|
||||||
$this->registerFactoryCommand();
|
// $this->registerFactoryCommand();
|
||||||
// $this->registerSeedCommand();
|
// $this->registerSeedCommand();
|
||||||
// $this->registerTestCommand();
|
// $this->registerTestCommand();
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ class DatabaseSeeder extends Seeder
|
|||||||
{
|
{
|
||||||
Model::unguard();
|
Model::unguard();
|
||||||
|
|
||||||
// $this->call('UserTableSeeder');
|
{{seeders}}
|
||||||
|
|
||||||
Model::reguard();
|
Model::reguard();
|
||||||
}
|
}
|
1
templates/db-seeder/seeder.wnt
Normal file
1
templates/db-seeder/seeder.wnt
Normal file
@ -0,0 +1 @@
|
|||||||
|
$this->call({{name}}::class);
|
11
templates/seeder.wnt
Normal file
11
templates/seeder.wnt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class {{name}} extends Seeder
|
||||||
|
{
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
factory({{model}}::class, {{count}})->create();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user