codegaf/crudgenerator 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

codegaf/crudgenerator

Composer 安装命令:

composer require codegaf/crudgenerator

包简介

Comando para crear un crud completo a nivel de backend con Laravel.

README 文档

README

Latest Version on Packagist Total Downloads

Generador de crud backend para 10codesoftware.

Instalación

Puedes instalar el paquete via composer:

composer require codegaf/crudgenerator

Guía de uso

El comando crud generator de la parte del backend genera las siguientes clases:

  • Migration.
  • Model.
  • Controller.
  • Service.
  • Repository.
  • DataTable.
  • Request.
  • Factory.

La clase migration irá directamente en database/migrations. La clase model irá almacenada en la carpeta app/models. Las demás clases irán en carpetas concretas siguiendo la convención. Ejemplo: el controlador de un crud generator de users irá en UserController\UserController.php.

El crud generator necesita conocer unos datos previos para su funcionamiento correcto. Estos datos lo especificaremos en una plantilla config que tendrá su ubicación en la carpeta config/models. El nombre del archivo seguirá la convención singular camelCase. Ejemplos: user, userContact, car… Por ejemplo, imaginemos que los usuarios tienen contactos, relación 1:N, un usuario tiene muchos contactos y cada contacto pertenece a un usuario.

Importante: Como cualquier archivo config en Laravel, cada vez que modifiquemos el archivo config relacionado con el crud generator tendremos que llamar al comando:

php artisan config:cache

Si ejecutamos el crud generator y no hemos llamado al comando de Laravel que reconstruye la caché, los cambios no surtirán el efecto deseado.

Índice migration.

1.Columns

Los índices del array columns contemplan los nombres de las columnas tal y como estarán en base de datos. Las opciones contempladas por cada columna serán:

  • type -> String. Obligatorio. El tipo de columna en base de datos. Tal y como especificamos en el migration, es decir, acepta todos los tipos que acepta Laravel. $table->string, $table->text, $table->integer…

  • nullable -> Booleano. Opcional. Si especificamos esta opción y la establecemos a true, la columna en base de datos será nullable. Si no especificamos esta opción o la establecemos a false la columna no será nullable.

  • unique -> Booleano. Opcional. Si especificamos esta opción y la establecemos a true, la columna en base de datos será única. Si no especificamos esta opción o la establecemos a false la columna no será única.

  • default -> String|Integer|Boolean… Opcional. Si especificamos esta opción y establecemos un valor, se añadirá un valor por defecto a la columna en base de datos.

2.Foreigns

Los índices del array foreigns recogen las columnas de tipo foreign key. Este índice no es obligatorio añadirlo. Solo será necesario para las tablas con relaciones. Las opciones de cada array foreign serán:

  • references -> String. Obligatorio. Es la columna relación en la otra tabla de la foreign key.

  • table -> String. Obligatorio. Es el nombre de la tabla con la que la foreign key se relaciona.

  • onDelete -> String. Obligatorio. Es la operación que se llevará a cabo con las relaciones si la fila es borrada. El índice es obligatorio especificarlo pero si no se requiere ninguna acción podrá dejarse vacío.

'migration' => [
   'columns' => [
       'name' => [
           'type' => 'string',
           'nullable' => false,
           'default' => 'string|integer|boolean...'
       ],

       'surname' => [
           'type' => 'string',
           'nullable' => false,
           'unique' => false,
       ],

       'email' => [
           'type' => 'string',
       ],

       

'phone' => [
           'type' => 'string',
           'nullable' => true,
       ],

       'born_date' => [
           'type' => 'date',
       ],

       
       'user_id' => [
           'type' => 'unsignedBigInteger',
       ]
       
   ],

   
   'foreigns' => [
       'user_id' => [
           'references' => 'id',
           'table' => 'users',
           'onDelete' => 'cascade'
       ]
   ]
],

3.Model

El índice model nos permitirá especificar los fillable y las relaciones de la siguiente manera:

  • fillable -> String. Obligatorio. En este índice especificaremos las columnas que se guardarán en base de datos. Ejemplo:
‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
],
  • relations -> Array. Opcional. En este índice podemos especificar las relaciones con otras entidades. Los índices del array relations serán los nombres de las relaciones que contempla Laravel. Como por ejemplo belongsTo, hasMany, hasOne, belongsToMany...

Este array puede tener las siguientes opciones:

  • functionName -> String. Obligatorio. Es el nombre de la función. Ejemplo: public function users…

  • modelClass -> String. Obligatorio. Es la clase destino de la relación. Ejemplo: User::class.

  • foreign -> String. Obligatorio. Es la columna foreign. Ejemplo: user_id

‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘belongsTo’,
                ‘functionName’ => ‘user’,
                ‘modelClass’ => ‘User::class’,
                ‘foreign’ => ‘user_id’
        ],
        1 => ...
    ],
],

Para las relaciones belongsToMany tendremos las siguientes opciones disponibles:

  • table -> String. Obligatorio. Es el nombre de la tabla intermedia.

  • foreignKey -> String. Obligatorio. Es el nombre de la foreign key.

  • relationKey -> String. Obligatorio. Es el nombre de la key del modelo.

  • pivot -> String. Opcional. Si la tabla intermedia tiene columnas pivotes podemos establecerlas aquí.

‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘belongsToMany’,
                ‘functionName’ => ‘user’,
                ‘modelClass’ => ‘User::class’,
                ’table’ => ’users_contacts’,
                ‘foreignKey’ => ‘user_id’,
                ‘relationKey’ => ‘friend_id’,
                ‘pivot’ => ‘friendship_date, active’
        ],
        1 => ...
    ],
],

Para las relaciones polimórficas tendremos las siguientes estructuras disponibles:

  • morphTo
‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘morphTo’,
                ‘functionName’ => ‘imageable’,
        ],
        1 => ...
    ],
],
  • morphOne, morphMany, morphToMany, morphedByMany
‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘morphOne’, // morphMany, morphToMany, morphedByMany
                ‘functionName’ => ‘image’,
                ‘modelClass’ => ‘User::class’,
                ’name’ => ’imageable’,
        ],
        1 => ...
    ],
],

4.DataTables

La plantilla trae una novedad respecto a nuestra forma de emplear datatables hasta ahora. Esta vez se instancia y se prepara en el backend. Para que el crud generator pueda realizar esta tarea debemos añadir la siguiente estructura al config.

Los índices del array dataTables son los nombres de las columnas en base de datos o los alias que le hayamos dado a los campos en la consulta. Estos arrays tienen a su vez otro índice que permite especificar el label de la columna. No es necesario especificar la columna acción. El crud generator ya la tiene en cuenta automáticamente. Si no se necesita puede eliminarse una vez generada la clase DataTable.

  • label -> String. Obligatorio. En formato lang pasaremos el nombre de la columna tal y como se verá en la vista.
'dataTables' => [
   'name' => [
       'label' => 'global.name'
   ],
   'surname' => [
       'label' => 'global.surname'
   ],
   'email' => [
       'label' => 'global.label'
   ],
   'phone' => [
       'label' => 'global.phone'
   ],
   'born_date' => [
       'label' => 'global.born_date'
   
   ],
   'created_at' => [
       'label' => 'global.created_at'
   ]
],

Una vez configurado correctamente el archivo en config/models podemos proceder a ejecutar los comandos que se indican a continuación:

Para que los cambios del archivo config surtan efectos tenemos que limpiar la caché del config de Laravel:

php artisan config:cache

Para ejecutar el comando completo añadiremos la opción --all. El nombre del modelo debe especificarse en PascalCase (Car, UserContact)

php artisan crud:generator Model --all

Si no necesitamos ejecutar todos los ficheros obviaremos la opción --all. La terminal nos irá preguntando qué archivos queremos generar.

php artisan crud:generator Model

Comando destroy crud

Si estás en una fase muy temprana del crud y has cometido algún error en la generación puedes utilizar un comando que destruye el crud entero salvo el migrations en la carpeta database. La razón por la que el archivo migration no se elimina es que lleva una parte dinámica que hace referencia al timestamp del momento de su creación.

El comando se ejecuta de la siguiente manera:

php artisan destroy:crud Model
  • model -> Obligatorio. model hace referencia al modelo del crud en formato mayúscula, singular y camel case.

El sistema pedirá confirmación antes de realizar el proceso. Se recuerda que esta acción destruye el crud entero, por lo que hay que sopesar, si se tenía avanzado el crud, si merece la pena o no ejecutar el comando. Como el archivo migration tiene una parte dinámica es el único que el comando destroy:crud no podrá eliminar. Deberá realizarlo a mano.

Changelog

Please see CHANGELOG for more information what has changed recently.

Security

If you discover any security related issues, please email isaaccamrod@gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Laravel Package Boilerplate

This package was generated using the Laravel Package Boilerplate.

codegaf/crudgenerator 适用场景与选型建议

codegaf/crudgenerator 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3.48k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 10 月 21 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「CrudGenerator」 「10codesoftware」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 codegaf/crudgenerator 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 codegaf/crudgenerator 我们能提供哪些服务?
定制开发 / 二次开发

基于 codegaf/crudgenerator 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 3.48k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 16
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-10-21