-
Notifications
You must be signed in to change notification settings - Fork 2
CRUD
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.
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)
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
{
}
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
{
}
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;
}
}
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.
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
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.