InfyOmLabs / laravel-generator

API and Admin Panel CRUD Generator for Laravel.
https://www.infyom.com/open-source
MIT License
3.78k stars 802 forks source link

[Feature]: Just had and idea tell me what you think #111

Open phillipmadsen opened 8 years ago

phillipmadsen commented 8 years ago

Create a plan of whole build before hand.

The whole output of crud could be put in instructions in the config file as well as the artisan commands. with a simple enable switch just like you put in place for the data tables. As usual I will make this clear with and example.

return [

    "automated_crud_instructions" => [
        "useAutoBuilder" => "true",
        "buildout_each"  => [

            "users" => {
                "shared_parts_handle_all_prefixs" => {
                    "model"                           => "App\Models", /* {User} */
                    "repository" => "App\Repositories", /* {UsersRepo} */
                    "controller" => "App\Http\Controllers", /* {UsersController} */
                    "api_controller" => "App\Http\Controllers\API", /* {UsersAPIController} */
                    "request" => "App\Http\Requests", /* {UsersRequest} */
                    "api_request" => "App\Http\Requests\API", /* {UsersAPIRequest} */
                    "schema_files" => base_path("resources/model_schemas/User.json"), /* fields-file to use*/,
                },
                "shared_model_tables"
                            if(table_exits(roles)){
                            "users" => "hasMany:roles"
                            }   elseif(exits(infyom:builder:roles)){
                                funtion(){
                                    \Artisan::call('infyom:builder Role');
                                }else{
                                    \Artisan::call('php artisan infyom:api_scaffold Role --fieldsFile="resources/model_schemas/Role.json" --prefix=admin');

                                }
                            }
                        },

                "crud_prefix_instructions"        => [
                    "prefix" => [
                        {
                            "prefix_name"    => "admin",
                            "path_prefix"    => "admin",
                            "route_prefix"   => "admin",
                            "images"         => storage_path("storage/app/user_files"),
                            "files"          => public_path("uploads/_users"),
                            "views"          => base_path("resources/views/admin/users"),
                            "templates_dir"  => base_path("resources/infyom/infyom-generator-templates/users/admin"),
                            "generate_views" => [{"index", "datatable", "table", "edit", "show", "fields", "show_fields", "create", "feed", "filemanager"}]
                        },
                        {
                            "prefix_name"    => "account",
                            "path_prefix"    => "account",
                            "route_prefix"   => "account",
                            "images"         => storage_path("storage/app/user_files"),
                            "files"          => public_path("uploads/_users"),
                            "views"          => base_path("resources/views/account"),
                            "templates_dir"  => base_path("resources/infyom/infyom-generator-templates/users/accounts"),
                            "generate_views" => [{"my_account", "ajax", "editInfo", "order_history", "show_fields", "feed"}]
                        },
                        {
                            "prefix_name"    => "livesite",
                            "path_prefix"    => "profile",
                            "route_prefix"   => "profile",
                            "images"         => storage_path("storage/app/user_files"),
                            "files"          => public_path("uploads/_users"),
                            "views"          => base_path("resources/views/profiles"),
                            "templates_dir"  => base_path("resources/infyom/infyom-generator-templates/users/profiles"),
                            "generate_views" => ["profile", "social_wall"]
                        },
                    ],
                ],
            },

            "articles" => [
                "shared_parts_handle_all_prefixs" => {
                    "model" => "App\Models\Article", /* {User} */
                    "repository" => "App\Repositories", /* {UsersRepo} */
                    "controller" => "App\Http\Controllers", /* {UsersController} */
                    "api_controller" => "App\Http\Controllers\API", /* {UsersAPIController} */
                    "request" => "App\Http\Requests", /* {UsersRequest} */
                    "api_request" => "App\Http\Requests\API", /* {UsersAPIRequest} */
                    "schema_files" => base_path("resources/model_schemas/Article.json"), /* fields-file to use*/,
                },
                "shared_model_tables"{
                            "user" => "belongsTo:user",
                            "category" => "hasOne:Category"
                        },
                "crud_prefix_instructions"        => [
                    "prefix" => [
                        {
                            "prefix_name"    => "admin",
                            "path_prefix"    => "admin",
                            "route_prefix"   => "admin",
                            "images"         => storage_path("storage/app/article_files"),
                            "files"          => public_path("uploads/_articles"),
                            "views"          => base_path("resources/views/admin/articles"),
                            "templates_dir"  => base_path("resources/infyom/infyom-generator-templates/articles/admin"),
                            "generate_views" => [{"index", "datatable", "table", "edit", "show", "fields", "show_fields", "create", "feed", "filemanager"}]
                        },
                        {
                            "prefix_name"    => "account",
                            "path_prefix"    => "account",
                            "route_prefix"   => "account",
                            "images"         => storage_path("storage/app/article_files"),
                            "files"          => public_path("uploads/_articles"),
                            "views"          => base_path("resources/views/blog"),
                            "templates_dir"  => base_path("resources/infyom/infyom-generator-templates/articles/read"),
                            "generate_views" => [{"follow_story", "ajax", "previosly_read"}]
                        },
                        {
                            "prefix_name"    => "livesite",
                            "path_prefix"    => "blog",
                            "route_prefix"   => "blog",
                            "images"         => storage_path("storage/app/article_files"),
                            "files"          => public_path("uploads/_articles"),
                            "views"          => base_path("resources/views/blog"),
                            "templates_dir"  => base_path("resources/infyom/infyom-generator-templates/articles/blog"),
                            "generate_views" => ["blog", "single", "feed"]
                        },
                    ],
                ],
            ],

        ],
    ],
]

This way you could run a builder command and it will output all the files. of course everything will have to be configured to make all this happen. Just wondering your thoughts on this?

NightZpy commented 8 years ago

I like, but, add subfolders by module or namespace, example:

app/Repositories/Post/PostRepository.php app/Repositories/Post/Comment/CommentRepository.php