innoboxrr/larapack-generator


README

Apoya Nuestro Trabajo 馃檶

Desarrollamos estos paquetes para la comunidad de Laravel con el objetivo de hacer la vida de los desarrolladores m谩s f谩cil. Si te sientes agradecido por nuestro trabajo y te gustar铆a apoyarnos, considera inscribirte en uno de nuestros cursos de pago. Nos ayudas a seguir manteniendo estos recursos y mejoras tus habilidades.

Te recomendamos especialmente el curso Desarrollo de Paquetes en Laravel. Aprender谩s a crear tus propios paquetes de Laravel y PHP, optimizando tu productividad como desarrollador.

Gracias por tu apoyo, 隆apreciamos enormemente a nuestra comunidad!

Instalaci贸n

Para instalar el paquete, ejecuta el siguiente comando:

composer require innoboxrr/larapack-generator

Si tras la instalaci贸n no se a帽ade el instalador en la ra铆z del directorio, ejecuta el siguiente comando:

cp vendor/<vendor>/<package>/builder.example builder

Requerimientos

  1. El paquete supone que el proyecto Laravel tiene por lo menos el modelo App\Models\User.
  2. Se recomienda tener configurado AWS S3 para la exportaci贸n de archivos. Si no, modifica el par谩metro de configuraci贸n export_disk.
  3. Verifica que el modelo App\Models\User tenga el m茅todo isAdmin(). Si no tienes un sistema de roles, puedes implementar el siguiente m茅todo b谩sico:
public function isAdmin()
{
    return $this->id === 1;
}
  1. La estructura principal del paquete debe estar dentro del directorio src para proyectos de paquetes y app para aplicaciones Laravel.

Comandos Disponibles

JSON Importer

Este comando permite importar modelos y migraciones desde un archivo JSON. Ejemplo de uso:

php builder json:importer /path/to/file.json

Otros Comandos

make:app-service-provider        - Crea un proveedor de servicio de aplicaci贸n.
make:auth-service-provider       - Crea un proveedor de servicio de autenticaci贸n.
make:config                      - Crea un archivo de configuraci贸n.
make:controller                  - Crea un nuevo controlador.
make:event-service-provider      - Crea un proveedor de servicio de eventos.
make:events                      - Crea eventos y listeners para el modelo.
make:excel                       - Crea una clase de Excel.
make:export                      - Crea una clase de exportaci贸n.
make:export-notification         - Crea una clase de notificaci贸n de exportaci贸n.
make:factory                     - Crea una nueva f谩brica.
make:filters                     - Crea una clase de filtros.
make:full-model                  - Crea un entorno completo de modelo.
make:migration                   - Crea una nueva migraci贸n.
make:model                       - Crea un nuevo modelo.
make:model-traits                - Crea traits para el modelo.
make:model-view                  - Crea la secci贸n de administraci贸n en Vue.
make:observer                    - Crea un observer.
make:policy                      - Crea una nueva pol铆tica.
make:providers                   - Crea todos los proveedores de servicio.
make:requests                    - Crea una clase de requests.
make:resource                    - Crea una nueva clase de recurso.
make:route                       - Crea una nueva ruta.
make:route-service-provider       - Crea un proveedor de servicio de rutas.
make:test                        - Crea una nueva clase de test.

remove:full-model                - Elimina todas las entidades relacionadas con un modelo.

Ejemplo de JSON de Importaci贸n

{
    "models": [
        {
            "name": "Post",
            "props": [
                {
                    "name": "title",
                    "type": "string",
                    "constraint": null,
                    "default": null,
                    "nullable": false,
                    "fillable": true,
                    "creatable": true,
                    "updatable": true,
                    "exports_cols": true,
                    "cast": null,
                    "form": true,
                    "form_component": "TextInputComponent",
                    "form_submit": true,
                    // USAR ENUM PARA SelectInputComponent
                    "enum": {
                        "op1": "Option 1",
                        "op2": "Option 2"
                    },
                    "datatable": true,
                    "metas": false
                },
                {
                    "name": "payload",
                    "type": "longText",
                    "constraint": null,
                    "default": null,
                    "nullable": true,
                    "fillable": true,
                    "creatable": true,
                    "updatable": true,
                    "exports_cols": true,
                    "cast": "json",
                    "form": false,
                    "form_component": null,
                    "form_submit": false,
                    "enum": {
                        "op1": "Option 1",
                        "op2": "Option 2"
                    },
                    "datatable": true,
                    "metas": true
                },
                {
                    "name": "user_id",
                    "type": "foreignId",
                    "constraint": "users",
                    "default": null,
                    "nullable": false,
                    "fillable": true,
                    "creatable": true,
                    "updatable": true,
                    "exports_cols": true,
                    "cast": null,
                    "form": false,
                    "form_component": null,
                    "form_submit": true,
                    "enum": {
                        "op1": "Option 1",
                        "op2": "Option 2"
                    },
                    "datatable": true,
                    "metas": false
                }
            ],
            "load_relations": [
                {
                    "type": "belongsTo",
                    "related": "User",
                    "name": "user"
                }
            ],
            "editable_metas": [],
            "assignments": [],
            "filters": [
                {
                    "name": "Title",
                    "mode": "like"
                }
            ],
            "request": [
                {
                    "name": "Create",
                    "rules": {
                        "title": "required|string|max:255",
                        "payload": "nullable",
                        "user_id": "required|exists:users,id"
                    }
                },
                {
                    "name": "Update",
                    "rules": {
                        "title": "nullable|string|max:255",
                        "payload": "nullable",
                        "user_id": "nullable|exists:users,id"
                    }
                }
            ],
            "load_counts": []
        }
    ],
    "pivots": [
        {
            "name": "role_user",
            "props": [
                {
                    "name": "role_id",
                    "type": "longText",
                    "constraint": "roles",
                    "after": "id",
                    "default": null,
                    "nullable": false
                }
            ]
        }
    ]
}

Notas Importantes

  • Para el empleo de este paquete en el desarrollo de paquetes, se espera que el directorio que contenga la l贸gica principal tenga el nombre "src". En una aplicaci贸n de Laravel, la carpeta predeterminada es "app".