Skip to content
Alejandro Glejberman edited this page Jan 13, 2023 · 1 revision

WideStand ofrece una opción sencilla y semi-automática de crear CRUDs de entidades. Por CRUD se entienden las acciones "Create", "Retrieve", "Update" y "Delete". WS provee estas funcionalidades mediante la extensión de clases, implementación de interfaces y cumplimiento de convenciones.

Guía rápida

Para agregar un nuevo CRUD en el proyecto - dada una entidad definida - es necesario:

  • Crear el Repositorio
  • Crear el Servicio
  • Crear el Controlador
  • Crear el Formulario
  • Inyectar Roles
  • Definir Traducciones (opcional)

Repositorio

La entidad va a necesitar un repositorio propio, éste a su vez debe extender la clase WS\Core\Library\CRUD\AbstractRepository.

Ejemplo:

use WS\Core\Library\CRUD\AbstractRepository;

class JobRepository extends AbstractRepository
{
}

Servicio

Para gestionar la entidad además hay que crear un servicio que nos permita operar sobre ella y exponer información útil. Los servicios de entidad hay que crearlos dentro del directorio Service/CMS y deben tener el nombre de la entidad seguido del sufijo Service, por ejemplo JobService.

Ejemplo:

namespace App\Service\CMS;

use WS\Core\Library\CRUD\AbstractService;

class JobService extends AbstractService
{
}

Controlador

El controlador debe seguir el mismo nombre de la entidad, por ejemplo para Job su controlador será JobController. Además deberá extender de la clase abstracta WS\Core\Library\CRUD\AbstractController y deben ubicarse dentro del directorio Controller/CMS.

Debe implementar el constructor para inyectar el servicio de la entidad.

Ejemplo:

namespace App\Controller\CMS;

use App\Service\CMS\JobService;
use WS\Core\Library\CRUD\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

#[Route('/job', name: 'cms_job_')]
class JobController extends AbstractController
{
    public function __construct(JobService $service)
    {
        $this->service = $service;
    }
}

Formulario

Para gestionar la entidad es necesario definir un formulario de Symfony. Dado que es un formulario del CMS deberá ubicarse en Form/CMS y llevar el nombre de la entidad más el sufijo Type, por ejemplo JobType.

Ejemplo:

$builder
    ->add('slug', SlugType::class, [
        'required' => false,
        'label' => 'form.slug.label',
        'help' => 'form.slug.help',
        'attr' => [
            'placeholder' => 'form.slug.placeholder',
        ],
    ])
;

WS ofrece varios componentes para utilizar en los formularios, que facilitan la creación de inputs interactivos, como son la gestión de imágenes, slug, calendarios, markdown, entre otros.

Ver aquí más los componentes del formulario.

Seguridad

Por último es necesario inyectar los roles dentro de la jerarquía para que se puedan acceder a las acciones del CRUD.

Se debe añadir los roles de la entidad en config/packages/security.yaml, debajo de role_hierarchy:

    ROLE_ADMINISTRATOR:
        - ROLE_APP_JOB

    ROLE_APP_JOB:
        - ROLE_APP_JOB_VIEW
        - ROLE_APP_JOB_CREATE
        - ROLE_APP_JOB_EDIT
        - ROLE_APP_JOB_DELETE

Traducciones

Opcionalmente se pueden definir traducciones para el CMS. Se sugiere hacerlo, hay que escribir las traducciones en todos los idiomas que estén disponibles en WideStand al momento de crear el CRUD.

Se deberá crear un fichero de traducción propio para la entidad nueva del CRUD.

Por ejemplo en el caso de la entidad Job el fichero para las tradicciones en inglés será cms_job.en.yaml.

Por convención, los ficheros de traducción del cms irán dentro de la carpeta translations/cms.

Las siguientes son las claves requeridas:

  • menu
  • title
  • fields.<campo>.label
  • fields.<campo>.placeholder
  • create_success
  • create_error
  • edit_success
  • edit_error
  • delete_warning
  • delete_success
  • no_rows_found
  • not_found

En el caso de los campos deberá al menos definirse el label y según el formulario y tipo de campo lo requieran el placeholder y el help, esto es necesario para cada campo de la entidad que se visualice.