antoniosam / easypanelbundle
PHP library .
Installs: 68
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Language:Twig
Requires
- php: >=7.2.5
- antoniosam/custom-password: ^1.0
- antoniosam/easy-doctrine: ^1.0
- antoniosam/utilstring: ^1.2
- dev-master
- v3.0
- v2.5.2
- v2.5.1
- v2.5
- v2.4.5
- v2.4.4
- v2.4.3
- v2.4.2
- 2.4.1
- v2.4.0
- v2.3.1
- v2.3
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.6.1
- v1.6.0
- v1.5.0
- v1.4.1
- v1.4.0
- v1.3.0
- v1.2.5
- v1.2.4
- v1.1.4
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
This package is auto-updated.
Last update: 2025-04-14 01:05:46 UTC
README
###Se elimino todo el soporte para symfony 4 y 3
Bundle de soporte para la creacion de administradores simplificando las tareas sencillas list, new, edit, show(detail)
Para empezar
El bundle solo proporciona ayuda y soporte para crear platillas para las acciones mas basicas de un panel de administracion, no crea nuevos componentes para el framework, utiliza los componentes de symfony
- Render (twig)
- Form Interface
- Route Las consultas para mostrar informacion no se incorporan dentro del bundle, dependen del usuario.
Instalacion
composer require antoniosam/easypanelbundle
Y agregamos el bundle en el AppKernel
$bundles = [
Ast\EasyPanelBundle\EasyPanelBundle::class => ['all' => true],
...
]
Comandos Crud
Para facilitar la creacon del panel se incluyen metodos que generar automaticamente los controladores y formularios con funciones preestablecidas, puede ser todas las Entidades o una por una
Opcionales
- folder: Carpeta que se creara dentro de las carpetas de la estructura del proyecto
- prefix:Sufijo opcional para la ruta de los controladores (default:empty) Los parametros no deben incluir la carpeta src, se integran por default
create:panel
Busca todas las entidades dentro de la carpeta indicada y crea todos los controladores y formularios
php bin/console easypanel:create:panel nombre_proyecto directorio_entitys tipo
php bin/console easypanel:create:panel "Admin Mascotas" Entity(equal = /src/Entity) html
php bin/console easypanel:create:panel Demo Entity html --folder=admin --prefix=admin
php bin/console easypanel:create:panel Demo Entity api --folder=api --prefix=api
php bin/console easypanel:create:panel "Admin Mascotas" Entity --clase_login=usuario
ej.
php bin/console easypanel:create:panel "Admin Mascotas" Entity html --folder=admin --prefix=admin --clase_login=usuario
create:menu
Crea un archivo Twig que incluye todas las rutas de las entidades que se encontraron para poder importarla en la configuracion
php bin/console easypanel:create:menu Demo Entity
create:modulo
Selecciona una entidad por su namespace y crea su controlador y su formulario
php bin/console easypanel:create:modulo App\Entity\Mascota
php bin/console easypanel:create:modulo App\Entity\Mascota api --folder=api --prefix=api
Output
/project_root/src/Controller/MascotaController.php
/project_root/src/Controller/Api/MascotaController.php
install:assets
Descomprime 1 archivos Zip que contienen los recursos css y js para el panel(En las configuraciones se cambia el tipo de panel)
easypanel:install:assets --tipo=material o sb-admin
Login
NOTA Se recomienda primero crear el admnistrador antes de establecer la seguridad
El bundle solo incluye las pantallas y los controladores, la confifuracion de seguridad se debe hacer en el archivo security.yml
El servicio app.custom_encoder esta incluido dentro del bundle
security.yml
security:
encoders:
App\Entity\Administrador:
id: app.custom_encoder
...
providers:
entity_admin:
entity:
class: App\Entity\Administrador
property: correo
...
firewalls:
admin_area:
pattern: /admin.*
provider: entity_admin
anonymous: ~
form_login:
login_path: /admin/login/
check_path: /admin/login/
default_target_path: /admin/
logout:
path: /admin/login/salir
target: /admin/
main:
....
access_control:
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/*, roles: IS_AUTHENTICATED_FULLY }
....
En comando create:panel genera la clase EasyPanelLoginFormAuthenticator
Dentro de la carpeta src/Security/[dir]/EasyPanelLoginFormAuthenticator y se debe incluir en el firewall
dir es el nombre de la carpeta que se uso en el comando
ej.
firewalls:
admin_area:
pattern: /admin.*
provider: entity_admin
anonymous: ~
form_login:
login_path: /admin/login/
check_path: /admin/login/
default_target_path: /admin/
logout:
path: /admin/login/salir
target: /admin/
guard:
authenticators:
- App\Security\[dir]\EasyPanelLoginFormAuthenticator
Servicio
Permite configuracion la vista, incluir un menu personalizado, cambiar el layout general(Al que Extiende la vista ), incluir el nombre del proyecto, y mas configuracion.
easy_panel:
layoutpanel: Layout que extiende la vista (Default: @EasyPanel/layoutmaterial.html.twig)
viewpanel: es el template que se usa para generar las vistas (Default: @EasyPanel/viewmaterial.html.twig)
layoutlogin: Es el layout que se usa para mostrar el formulario de sesion (Default: @EasyPanel/loginlayout.html.twig))
viewmenu: Es el template que se incluira en la seccion de menu (Default: @EasyPanel/Default/menumaterial.html.twig)
nombreproyecto: Nombre del proyecto (Default: '')
rutalogout: ruta de symfony para cerrar sesion(Default '')
Este servicio se utiliza para gestionar las vistas, hacer los renders si se usa el metodo render o parsear la respuesta si se usa json
NOTA Cuando se usa json solo funciona para EasyList y EasyShow y no se pueden agrupar 2 o mas vistas
Clases
EasyForm
Crea una vista que integra un formulario, El formulario debe ser creado anteriormente
$form = $this->createForm(MascotaType::class, new Mascota())->createView();
$easyForm = EasyForm::easy('Agregar Masctota', $form);
Para agregar mas opciones al formulario
$easyForm->addLinkBack($route, $parametros, $titulo ) ('btn-secondary', 'fa-arrow-left')
$easyForm->addLinkShow($route, $parametros, $titulo) ('btn-success', 'fa-list-ul')
$easyForm->addLink($route, $parametros, $titulo, $clase = 'btn-secondary', $fa_icon = null)
$easyForm->setDeleteForm($form_delete)
$easyForm->cleanLinks()
El servicio EasyPanel es el encargado de mandar la informacion a la platilla y twig se encarga del render
return $easypanel->render($easyForm);
Para configurar el formulario es necesario ir al archivo Type y hacer las validaciones y configuraciones necesarias
EasyList
Este clase tiene dependencia directa de plugin EasyDoctrine y la clase EasyData
Esta clase permite generar una tabla(lista) de una consulta y mostrar los campos establecido. Agregar paginacion, busqueda, ordenamiento y seleccion de items
$easyList = EasyForm::easy('Lista de mascotas', EasyData $easyData, ['id','nombre','creado']);
$easyList->setLabelsTable(['ID','Mascota','Registrado']);
setLabelsTable solo tiene efecto en la vista html
Se puede cambiar entre una respuesta json y html mediante el servicio $easypanel
HTML
return $easypanel->render($easyList);
API
return $easypanel->json($easyList);
EasyShow
Permite generar una tabla con el detalle de un objeto(show)
$easyShow = EasyForm::easy('Ver Mascota', $objeto, ['id','nombre','raza','propietario']);
$easyShow->setLabelsFields(['ID','Nombre de la Mascota','Raza','Propietario']);
setLabelsFields solo tiene efecto en la vista html
Al igual que EasyList se puede cambiar entre una respuesta json y html mediante el servicio $easypanel
HTML
return $easypanel->render($easyShow);
API
return $easypanel->json($easyShow);
Configuracion de Respuesta EasyShow y EasyList
Para poder dar flexibilidad a la creacion de vistas y respuestas json estas dos clases permiten el uso de multiples metodos
RENDER AS
Metodos que permiten modificar el valor un campo obtenido de la consulta y mostrarlo en un formato diferente
Valido en metodo json y render
$list->renderAsText('nombre'); <p>Popi</p> Default para todos los campos
$list->renderAsImage('foto','uploads/images'); domain.com/asssets/uploads/images/perro.jpg
$list->renderAsBoolean('activo'); <i class="fa fa-check"></i> <i class="fa fa-times"></i>
$list->renderAsDate('nacimiento'); 2020-01-01
$list->renderAsTime('consulta_hora'); 12:00:00
$list->renderAsDateTime('creacion'); 2021-01-01 09:00:00
$list->renderAsRaw('descripcion'); <p>Parrafo generado con algun editor web</p>
$list->renderAsJson('Etiquetas'); <ul><li>Pequeña</li><li>Cachorro</li></ul>
$list->renderAsLink('certificado','uploads/docs'); domain.com/asssets/uploads/docs/CErtificado.pdf
$list->renderAsTranslate('cv'); (detalle acontinuacion)
renderAsImage y renderAsLink
El metodo renderAsImage y renderAsLink permite agregar una ruta para la correcta visualizacion de la imagen o el archivo.
Si en la ruta que se proporciona ya incluye el nombre del archivo se usa esa por defecto, si no lo incluye se contruye con el valor de path y el valor del archivo
$path.'/'.$valor
Si se ignora solo se antepone '/' para marcar la raiz del sitio
$manager = $this->get('assets.packages');
$manager->getUrl('comprobantes'));
...
$vista->renderAsImage('fotoperfil',$manager->getUrl('uploads/perfil'))
...
Tomando en cuenta que el metodo fotoperfil devolviera un valor fotousuario.jpg el resultado html seria:
$vista->renderAsImage('fotoperfil',$manager->getUrl('uploads/perfil'))
...
<img src="/uploads/perfil/fotousuario.jpg" alt="Image" class="img-responsive easypanel-img">
Para el metodo renderAslink se sugiere utilizar el metodo generateUrl de symfony
Tomando en cuenta que el metodo archivo devolviera un valor registro1.pdf y tomando un ejemplo de de ruta file_preview
con la configuracion /vista/{archivo}/preview
obtendriamos
$vista->renderAsLink('fotoperfil',$this->generateUrl('file_preview',['archivo'=>$objeto->getArchivo()]))
...
<a href="/vista/registro1.pdf/preview" target="_blank" class="img-responsive easypanel-link">registro1.pdf</a>
Si no se incluye el nombre del archivo en la ruta generada solo se incluye al final
$vista->renderAsLink('fotoperfil','/vista-archivo/preview')
...
<a href="/vista-archivo/preview/registro1.pdf" target="_blank" class="img-responsive easypanel-link">registro1.pdf</a>
TRANSLATE
Para aplicar la traduccion este bundle se basa en la configuracion de knplabs/doctrine-behaviors
https://github.com/KnpLabs/DoctrineBehaviors
Para poder aplicarlo solo se debe configurar la columna
[...,'translate.titulo',...]
Por default la traduccion sera con el parametro locale de la clase Request de Symfony
Para poder ver varias traducciones al mismo tiempo se agregan los idiomas a la columna
[...,'translate.titulo~en|es',...]
[...,'translate.titulo~en|es|it',...]
renderAsTranslate
Y por ultimo para poder visulizar la traduccion se creo el metodo renderAsTranslate
$view->renderAsTranslate('translate.titulo');
$view->renderAsTranslate('translate.titulo~en|es');
$view->renderAsTranslate('translate.titulo~en|es|it');
RELACIONES
Si se tiene una consulta relacionada se puede elegir el metodo que desea visualizar el objeto relacionado
$columnas=['userid', 'username','usertask.name'];
Los metodos userid y username imprimirian el valor correspondiente para usertask el metodo internamente comprueba que la relacion no devuelda un valorNull y despues hace el llamado. Internamente la ejecucion seria la siguiente:
$relacion = $objeto->getUsertask()
if($relacion!=null){
return $relacion->getName();
}else{
return '';
}
En la version 3 se permite una relacion hasta 2 niveles
$columnas=['userid', 'username','localidad.municipio.nombre'];
$usuario->getLocalidad()->getMunicipio()->getNombre()
EasyList Configuracion
Para poder agregar usabilidad a la vista de Lista se tiene diferentes metodos
RUTAS
Se tiene que usar rutas registradas por symfony en el proyecto
$list->tableLinkEdit($route, $parametros, $nombre)
$list->tableLinkShow($route, $parametros, $nombre)
$list->tableLink($route, $parametros, $texto, $clase = 'btn-secondary', $fa_icon = null)
$list->tableCleanLinks()
ORDERNAMIENTO y BUSQUEDA
$list->enableSearch($value,$textbutton = 'fa-search',$classbutton='btn',$classcontainer='') $list->enableOrder($route,$parametersroute,$ordercolumn = 1,$ordertype = 'ASC');
PAGINACION
$list->setPageInfo($pageinfo); $list->createListPages($search,$route,$classitem,$classactive,$first = "",$last = "");
CONTADOR DE FILA
$list->setFirstColumnCount(true);
NOTA solo funciona cuando la seccion se muestra como html
GLOBAL: Links el final de la vista
En los 3 tipos de clases se permite el ingreso de links al final de la seccion
La ruta tiene que ser una ruta definida en el proyecto por symfony
$list->addLinkEdit( $route, $parametros, $nombre) ('btn-info', 'fa-edit')
$list->addLinkBack( $route, $parametros,$nombre ) ('btn-secondary', 'fa-arrow-left')
$list->addLink($route, $parametros, $texto,$clase = 'btn-secondary',$fa_icon = null)
$list->cleanLinks()
NOTA solo funciona cuando la seccion se muestra como html
Enconder Symfony
Se agrega la clase CustomEnconder como serivicio en el archio services.yml y ese servicio se vincula con la tabla destino usando el encoder del archivo security.yml
(services.yml)
app.my_custom_encoder:
class: Ast\EasyPanelBundle\CustomPassword\CustomEnconder
(security.yml)
security:
encoders:
AppBundle\Entity\User:
id: app.my_custom_encoder
Clase BuildPassword
Si se necesita crear la contraseña y no se puede acceder al encoder la clase BuildPassword puede generar las contraseñas con el mismo resultado que el encoder
$bp = new BuildPassword()
$bp->generate($pass,BuildPassword::randomSalt());
$hashpass = $bp->getPass();
$salt = $bp->getSalt();
BuildPassword::create($pass,$salt)
### Authors
* **Antonio Samano** - *Initial work* - [Antoniosam](https://github.com/antoniosam)
### License
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details