Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aprendesymfony2 Sample PDF
Aprendesymfony2 Sample PDF
Jon Torrado
Este libro está a la venta en http://leanpub.com/aprendesymfony2
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Por qué escribo este libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Qué vas a aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
A quién está dirigido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Cómo se divide el libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Nota del autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1
Introducción 2
cualquier temática, no solo esta. Creo que en la sociedad actual necesitamos de profesores excelentes
que traten de mejorarse cada día ya que, dando lo mejor de ellos, conseguirán que sus alumnos den
lo mejor de sí mismos.
Esto que te acabo de contar lo conecto con dos conceptos japoneses muy interesantes. El primero
de ellos (aunque es una leyenda urbana, permíteme ser feliz contándotelo) es que, en su cultura, los
profesores son los únicos que no tienen que hacer una reverencia ante el emperador, porque éste
considera que sin ellos no existiría un emperador.
Por otro lado está uno de los conceptos que desde que lo leí han aplicado una mejora sustancial en
mi vida: Kaizen. Este concepto japonés viene a resumirse como el proceso de mejora que debemos
aplicarnos cada uno de nosotros a diario.
Todo lo que voy a escribir en este libro lo he aprendido gratuitamente durante muchas semanas,
incluso años, y decido compartirlo contigo para que no tengas que gastar tanto tiempo en aprenderlo
tú. Además considero que ponerle un precio a algo que he conseguido gratis y que actualmente me
da de comer es bastante absurdo. Es por esto que este libro es completamente gratuito, pero si al
finalizarlo te gusta y quieres agradecerme el trabajo que he realizado, puedes comprarlo por el precio
que consideres sabiendo que estás ayudando a una buena causa, ya que donaré el 50% de lo que
pagues por el libro a la plataforma de crowdfunding watchi² que proporciona todo tipo de ayuda
médica a gente de todo el mundo que lo necesita. Aprendes, disfrutas y ayudas a una buena causa.
PHP o ni siquiera han programado. Lógicamente, depende del punto en el que te encuentres, puede
que te cueste más o menos captar algunas de las cuestiones que plantearé durante el libro, pero esto
no significa que estás fuera del target ni mucho menos.
En cuanto al nivel del lector, me arriesgaré a decir que es un libro para principiante - intermedio.
Si ya llevas mucho tiempo con Symfony y en el desarrollo web, es posible que no aprendas nada.
Aún así, también cabe la posibilidad de que alguno de los capítulos dedicados a tecnologías externas
sean del interés de profesionales del sector, pero desde luego no está pensado para ese nivel de
desarrollador.
Ganas y fuerza de voluntad, es lo único que necesitas para adentrarte en este mundo, ¡ánimo!
El instalador de Symfony
Desde hace ya un tiempo, Symfony cuenta con su propio instalador en un archivo .phar⁵. Antes de
disponer de este instalador, tenías que descargarte un archivo comprimido desde la web oficial de
Symfony y descomprimirlo en la carpeta sobre la que ibas a desarrollar; posteriormente añadieron
el proyecto en Packagist⁶ y el gestor de dependencias Composer⁷ hizo de instalador. Actualmente, lo
mejor que puedes hacer es mantener el instalador de Symfony como binario de tu sistema operativo
para que puedas ejecutarlo como cualquier otro comando. Para ello, utiliza los siguientes comandos
o los correspondientes a tu sistema operativo:
Una vez realizado, podrás ejecutar el comando symfony desde la ruta que quieras. Como consejo me
gustaría decirte que procures mantener el instalador de Symfony actualizado ejecutando el siguiente
comando:
⁴http://symfony.com/doc/current/book/installation.html
⁵http://php.net/manual/es/phar.using.intro.php
⁶https://packagist.org/
⁷https://getcomposer.org/
4
Capítulo 1: instalación y configuración 5
¡Genial! Ahora que ya dispones del instalador de forma global, ya puedes crear tu primer proyecto
Symfony. Para ello, ejecuta el siguiente comando:
El comando anterior creará la carpeta aupa_bilbao con todo lo necesario para comenzar a trabajar
sin perder un solo minuto, todo ello automágicamente. Si has leído la documentación de Symfony
o has utilizado Composer con anterioridad, deberías saber que la carpeta vendor, situada en la raíz,
contiene todas las dependencias necesarias de tu proyecto. Estas dependencias se definen en el
archivo también situado en la raíz composer.json, archivo que utilizaremos en varias ocasiones
durante todo el libro. Sin embargo, el otro archivo situado a la par cuyo nombre es composer.lock
muestra las versiones bloqueadas, versiones exactas que se descargarán al ejecutar composer
install.
En este punto, ya hemos hablado varias veces sobre Composer, pero, ¿qué es Composer?
NOTA: se establece la versión 2.8 en el comando anterior puesto que bundles que se utilizan en este
libro todavía no funcionan con Symfony 3.
Composer
Composer es la herramienta por excelencia para la gestión de dependencias de PHP que nos ayuda a
introducir “paquetes” o librerías de terceros en nuestro proyecto y así poder utilizarlos de una forma
sencilla. Si has utilizado “npm” de Node o “bundler” de Ruby, esto es muy similar; si no es el caso y
nunca los has usado, no te preocupes puesto que en este libro tendrás la oportunidad de hacerlo.
Al igual que el instalador de Symfony, lo mejor es disponer de Composer como comando del sistema
operativo y, de esta forma, poder ejecutarlo desde cualquier ruta. Para esto, ejecuta los siguientes
comandos:
En cuanto al proyecto Symfony, gracias a su propio instalador, ya tenemos los “paquetes base”
descargados en la carpeta vendor y los archivos composer.json y composer.lock bien definidos.
Pero si el proyecto sobre el que estás trabajando es un proyecto descargado o estás desplegando el
proyecto en un servidor, lo correcto es que ejecutes el comando composer install en la raíz del
mismo. Este comando instalará las versiones concretas especificadas en el archivo composer.lock y
que, a su vez, deberían ser las versiones que están probadas y carecen de fallos o incompatibilidades.
Capítulo 1: instalación y configuración 6
Sin embargo, si lanzas el comando composer update, el proceso ignorará el archivo de bloqueo y
actualizará a la última versión posible que hayas definido en el archivo composer.json, actualizando
el archivo de bloqueo cuando termine el proceso de descarga.
¡Oye! No te olvides de actualizar tus dependencias, cada semana se corrigen bugs de seguridad o se
añaden nuevas funcionalidades que seguro que aportan valor a tu proyecto. Y, por supuesto, mantén
también tu Composer actualizado con el siguiente comando:
1 [mysqld]
2 collation-server = utf8_general_ci
3 character-set-server = utf8
Hecho esto, solo te queda decirle a Symfony cuáles son tus datos de conexión a la base de datos.
Dirígete al archivo app/config/parameters.yml que automáticamente te ha creado el instalador, y
edita los parámetros que se encuentran en él introduciendo los datos que corresponden a tu máquina.
Una vez modificados, lanza el siguiente comando para crear la base de datos:
¡Buen trabajo! Ya tienes tu base de datos creada para empezar a trabajar. Solo te queda saber una
cosilla más: Symfony hace uso de una serie de directorios a los que hay que darles permiso de
escritura. Dichos directorios los usará tanto tu servidor web como la consola del framework, por lo
que ambos usuarios del sistema operativo deben tener permiso para escribir en ellos.
Capítulo 1: instalación y configuración 7
La primera línea almacena en HTTPDUSER el usuario que está ejecutando nuestro servidor web, ya
que dependiendo del sistema operativo y del servidor, este usuario varía. Las otras dos líneas se
encargarán de darle a ese usuario y al usuario de la consola (es decir, el usuario con el que ejecutarás
los comandos en la terminal) permisos para escribir en dichas carpetas.
Otorgados los permisos pertinentes, ya estás a punto de terminar con la instalación.
El servidor web
Tienes la posibilidad de trabajar con Apache de forma nativa creando un VirtualHost en tu
ordenador. No entra dentro del alcance de este libro el mostrar cómo se hace ya que existe una
forma mucho más sencilla que, aunque es menos potente, didácticamente nos vale. Si quieres saber
cómo llegar a buen puerto con esta primera opción, visita este enlace⁹.
En este momento, y suponiendo que tienes PHP instalado en tu ordenador, te vale con ejecutar el
siguiente comando en la raíz del proyecto:
1 app/console server:run
Tal y como te muestra la terminal, ya puedes acceder a tu proyecto Symfony navegando a la URL
http://127.0.0.1:8000/. Lamentablemente, todavía no hay (casi) nada que ver, pero lo solucionaremos
muy pronto.
Entorno de desarrollo
Si vas a desarrollar Symfony, te aconsejo que dispongas de un entorno de desarrollo. A día de hoy, el
IDE que mejor trabaja con Symfony es PhpStorm¹⁰. Existen muchos otros como NetBeans o Aptana,
⁸http://symfony.com/doc/2.8/book/installation.html#book-installation-permissions
⁹http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html
¹⁰https://www.jetbrains.com/phpstorm/
Capítulo 1: instalación y configuración 8
e incluso editores como Sublime o Brackets que funcionan a la perfección. Pruébalos y escoge el que
mejor se adapte a tu forma de trabajar, aunque personalmente te aconsejo PhpStorm por algún que
otro truco que saldrá en futuros capítulos.
Truco 1
En cada capítulo te daré un consejo que sin duda te ayudará bastante. Depende de ti el utilizar
estos consejos o no (¡úsalos insensat@!). A partir de ahora, utilizaremos muy a menudo la consola
de Symfony. Como has podido ver, para ejecutar los diferentes comandos has de introducir php
app/console cada vez que vayas a ejecutar cualquiera de ellos, y si además quieres que el entorno
de ejecución sea prod en vez de dev, que es el entorno por defecto para los comandos, deberás añadir
--env=prod al final de cada uno de los comandos.
Con el siguiente truco darás un respiro a tu teclado y, por descontado, a tus manos:
Estos alias no se mantienen tras reiniciar la máquina, por lo que busca en Internet cómo guardar
dichos alias para que permanezcan en el tiempo (no te lo iba a dar todo hecho, ¿no?).
Además del alias, tampoco hace falta introducir el comando completo: con tal de que sea
completamente discriminatorio vale. ¿Qué quiere decir esto? Como “un ejemplo vale más que mil
palabras”, a continuación te aclaro las ideas:
1 dev s:r
El comando anterior ejecutará php app/console --env=dev server:run. ¿Por qué? Porque los
comandos que empiezan por “s” son server y swiftmailer, pero dentro de éstos solo hay uno que
empiece por “r” que es server:run.
¡Enhorabuena! Ya eres más eficiente que muchos de los desarrolladores Symfony, los cuales
desconocen este pequeño truco :)
Resumen
En este capítulo hemos aprendido la forma correcta de desplegar un proyecto Symfony nuevo para
comenzar a trabajar con él. Gracias a la instalación global de su instalador y el gestor de dependencias
Composer, las posteriores nuevas instalaciones se harán en cuestión de minutos, ¡incluso segundos!
Capítulo 2: los bundles de terceros
Una de las grandes maravillas que tiene Symfony y que comparte con otras muchas aplicaciones
de código abierto es que la comunidad aporta elementos que enriquecen el framework. En Symfony
existen varias formas de colaborar, pero la creación y mantenimiento de bundles que dotan de
funcionalidades extra a las que ya trae por defecto es sin duda una de las piezas clave para que
su utilización esté tan extendida. Durante este capítulo, aprenderemos las bases para instalar
bundles de terceros, aunque luego cada uno suele disponer de algunas secciones de configuración
que difieren entre ellos. ¡Empecemos!
9
Capítulo 2: los bundles de terceros 10
1 composer update
El siguiente paso es configurar el bundle. Al igual que con la versión de Composer, la mayoría
de los bundles disponen una configuración específica que deberás añadir en el archivo app/-
config/config.yml. La configuración concreta debe proporcionártela el creador del bundle y te
permitirá parametrizar tu nueva dependencia para que se adapte a tu proyecto y funcione como tú
quieres que lo haga. Cuidado: también hay bundles que requieren que modifiques otros archivos de
configuración del framework como el sistema de rutas, los servicios o la configuración relativa a la
seguridad. Al final, todos son archivos de configuración en los que deberás pegar una serie de líneas
que previamente habrás copiado de un archivo README o de documentación.
Hecho esto, el último paso es activar el bundle. Parece una chorrada pero cuando trabajas a diario
con esto, es una acción tan repetitiva que en algunas ocasiones te olvidas de realizarlo. Para activar las
nuevas dependencias, debes editar el archivo app/AppKernel.php y añadir las líneas de instanciación
necesarias que también se te habrán proporcionado en la documentación correspondiente. Si por
alguna razón no las encuentras en la documentación, puedes dirigirte a la carpeta vendor y buscar
el archivo principal del bundle para encontrar el nombre específico de la clase a instanciar.
¡Todo listo! “Tatúate” estos pasos en el código fuente de tu cerebro, aunque de momento puedes echar
de vez en cuando una ojeada a este capítulo. Son muy sencillos y te abrirán muchas posibilidades en
el mundo de Symfony, ¿todavía no te lo crees? No te preocupes, en los próximos capítulos, sin tocar
ni una sola línea de código, verás como tienes un Symfony con todo lo que siempre has deseado.
Truco 2
No se si llamar a esto un truco o un consejo, pero sin duda es algo que debes tener en cuenta en
tu día a día como desarrollador o desarrolladora. Como hemos visto a lo largo de este capítulo, la
web de knpbundles.com es un buen punto de referencia para bundles de terceros de Symfony. No te
limites a buscar aquí únicamente lo que necesitas y cuando lo necesitas, sino que debes visitar esta
web con asiduidad para saber lo que se está moviendo y lo que otros están utilizando. Sé curioso/a
y mantente a la última conociendo gran parte del trabajo de la comunidad. Claramente ganarás una
ventaja competitiva sobre todos los que están aislados de esta comunidad o se mantienen en su zona
Capítulo 2: los bundles de terceros 11
de confort reutilizando lo que llevan haciendo durante años. En el mundo en el que has decidido
embarcarte, un año significan tantos cambios y modificaciones que, o te subes al carro, o te quedas
atrás y no te dicen ni “hasta luego”.
Resumen
En este capítulo hemos aprendido las bases para instalar casi cualquier bundle realizado por
la comunidad. Hemos establecido una serie de pasos genéricos que te servirán en la instalación
y configuración de la mayoría de los desarrollos de la comunidad. En el siguiente capítulo
comenzaremos instalando uno de los bundles más potentes y más utilizados en el mundo Symfony:
el Admin Bundle del proyecto Sonata.
Capítulo 3: Admin Bundle
Como hemos visto en capítulos anteriores, existe una comunidad activa que aporta innumerables
elementos interesantes a la atmósfera de Symfony. Algunos lo hacen con más ahínco que otros,
y el proyecto Sonata es sin duda uno de los grandes a tener en cuenta. Dentro de su stack de
bundles¹² podrás encontrar un gran abanico de soluciones geniales. En el enlace anterior puedes
leer información acerca de los bundles en los que trabajan activamente para que vayas llenando tus
neuronas de información. Además, durante este libro probaremos algunos de estos bundles para que
veas cómo se instalan, cómo se configuran y, por supuesto, cómo se usan. El resto de ellos quedan
en tu tejado. ¡Vamos allá!
Ten cuidado con las versiones y comprueba siempre el repositorio de GitHub de Sonata Admin para
la versión que necesitas, siempre escogiendo la última rama estable posible. Esta rama es para la
versión 2.* de Symfony. Hoy en día, el equipo de Sonata está trabajando en la versión 4.0 que saldrá
con las versiones 3 de Symfony.
Como consejo te diré que estés atento cada vez que instales un nuevo bundle, porque muchas veces
verás líneas como:
12
Capítulo 3: Admin Bundle 13
Lo siguiente que tenemos que hacer es activar el bundle y sus dependencias. En el capítulo
anterior dejábamos esto para el último paso. ¿Por qué? Porque si activas el bundle sin terminar
de configurarlo, te dará error (siempre y cuando lleve una configuración asociada, por supuesto),
por lo que si te quedas a medias en alguno de los pasos que vamos a realizar a continuación
y quieres seguir trabajando con lo que estabas, tendrás que volver a desactivarlo y terminar la
instalación más adelante. Como vamos a hacerlo todo seguido, realmente el orden no importa, pero
que sepas que puedes dejar este paso para más adelante. Para activar todo lo necesario, edita el
archivo app/AppKernel.php, añadiendo las siguientes líneas justo antes del AppBundle:
1 new Sonata\CoreBundle\SonataCoreBundle(),
2 new Sonata\BlockBundle\SonataBlockBundle(),
3 new Knp\Bundle\MenuBundle\KnpMenuBundle(),
4 new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(),
5 new Sonata\AdminBundle\SonataAdminBundle(),
Para el siguiente paso tenemos que configurar los diferentes bundles que hemos activado. Todo
lo necesario está en la documentación oficial, y como decía uno de mis profesores: “un buen
programador sabe copiar y pegar con gusto”. Edita el archivo app/config/config.yml y añade la
siguiente configuración:
1 sonata_block:
2 default_contexts: [cms]
3 blocks:
4 sonata.admin.block.admin_list:
5 contexts: [admin]
Además de esto, tenemos que activar el translator. Para ello, en el mismo config.yml, debes eliminar
la “#” que precede a translator en la parte superior del archivo. ¿Lo has encontrado? Entonces
seguimos.
En este momento, realizamos la primera “prueba de fuego”: copiamos los assets a la carpeta pública
y limpiamos la caché. Si alguno de los siguientes comandos te da un error tengo que anunciarte que
te has equivocado en alguno de los pasos previos que hemos hecho:
Para entender las líneas anteriores deberías leerte la documentación de Symfony (¡¿todavía no te la
has leído?!). Para los más rezagados: la primera línea del código anterior copia los assets (recursos
como archivos JavaScript, CSS, imágenes…) desde carpetas no públicas (src/...) a la carpeta pública
Capítulo 3: Admin Bundle 14
web, en este caso creando un enlace simbólico (la mejor opción para cuando estamos en proceso de
desarrollo, en producción no deberías escribir este último parámetro); la segunda línea simplemente
limpia la cache para regenerar elementos necesarios para un renderizado correcto.
¡Estupendo! Ya tenemos el admin instalado pero… todavía no es funcional. La siguiente parte de la
configuración nos permitirá acceder a él a través de nuestro navegador. Por eso, necesitamos editar
el archivo app/config/routing.yml y añadir las rutas que vienen en el vendor y harán accesible el
desarrollo. Añade la siguiente configuración en la parte superior del archivo:
1 admin:
2 resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
3 prefix: /admin
4
5 _sonata_admin:
6 resource: .
7 type: sonata_admin
8 prefix: /admin
¿Sabes qué ya dispones un admin que funciona? Si tienes el servidor web levantado, tan solo
dirígete a http://127.0.0.1:8000/admin y podrás ver su solitario y despoblado panel de administración.
Supongo que aquí ya te han surgido varias dudas:
Tranquilo joven padawan, cada cosa llegará a su tiempo y de momento, este solo es el de responder
al primer punto que te planteo, ya que en el siguiente capítulo instalaremos un bundle que hace
uso de este administrador. Con él, automágicamente dispondremos de:
Lo mejor de todo esto es que la instalación del bundle de usuarios son tan solo 10 minutos, y la
potencia que te otorga es impresionante. Nunca más te preocuparás de hacer la gestión de usuarios
para ninguna de tus webs.
Capítulo 3: Admin Bundle 15
1 <?php
2 // src/AppBundle/Entity/Product.php
3
4 namespace AppBundle\Entity;
5
6 use Doctrine\ORM\Mapping as ORM;
7
8 /**
9 * @ORM\Entity
10 * @ORM\Table(name="product")
11 */
12 class Product
13 {
14 /**
15 * @ORM\Column(type="integer")
16 * @ORM\Id
17 * @ORM\GeneratedValue(strategy="AUTO")
18 */
19 protected $id;
20
21 /**
22 * @ORM\Column(type="string", length=100)
23 */
24 protected $name;
25
26 /**
27 * @ORM\Column(type="decimal", scale=2)
28 */
29 protected $price;
30
31 /**
32 * @ORM\Column(type="text")
¹³http://symfony.com/doc/current/book/doctrine.html#add-mapping-information
Capítulo 3: Admin Bundle 16
33 */
34 protected $description;
35 }
Recuerda generar los getters y setters y actualizar tu base de datos tras crear o modificar alguna de
tus entidades:
Lo siguiente que tienes que hacer es declarar la clase del admin que realizará el CRUD para esta
entidad. Si vienes de versiones anteriores de Symfony, sabrás que la inyección de dependencias
de cada bundle cargaba un archivo services.yml. Personalmente, me gusta modificar dicho archivo
para cargar un archivo admin.yml que también carga servicios, pero nos permite tener el código
bien “ordenadito”: cada cosa en su sitio. En el truco de este capítulo comparto contigo cómo lograr
este objetivo, pero para este ejemplo, deberás modificar el archivo app/config/services.yml para
cargar desde ahí nuestra admin class:
1 services:
2 sonata.admin.product:
3 class: AppBundle\Admin\ProductAdmin
4 tags:
5 - { name: sonata.admin, manager_type: orm, group: "Content", label: \
6 "Product" }
7 arguments:
8 - ~
9 - AppBundle\Entity\Product
10 - ~
11 calls:
12 - [ setTranslationDomain, [AppBundle]]
Excelente. Como puedes deducir del código anterior, nos hace falta crear una clase ProductAdmin
que es un “copy&paste” de la clase que puedes leer en la documentación, modificando únicamente
los campos de la entidad:
Capítulo 3: Admin Bundle 17
1 <?php
2 // src/AppBundle/Admin/ProductAdmin.php
3
4 namespace AppBundle\Admin;
5
6 use Sonata\AdminBundle\Admin\AbstractAdmin;
7 use Sonata\AdminBundle\Datagrid\ListMapper;
8 use Sonata\AdminBundle\Datagrid\DatagridMapper;
9 use Sonata\AdminBundle\Form\FormMapper;
10
11 class ProductAdmin extends AbstractAdmin
12 {
13 // Fields to be shown on create/edit forms
14 protected function configureFormFields(FormMapper $formMapper)
15 {
16 $formMapper
17 ->add('name')
18 ->add('price')
19 ->add('description')
20 ;
21 }
22
23 // Fields to be shown on filter forms
24 protected function configureDatagridFilters(DatagridMapper $datagridMapper)
25 {
26 $datagridMapper
27 ->add('name')
28 ->add('price')
29 ;
30 }
31
32 // Fields to be shown on lists
33 protected function configureListFields(ListMapper $listMapper)
34 {
35 $listMapper
36 ->addIdentifier('id')
37 ->add('name')
38 ->add('price')
39 ->add('description')
40 ->add('_action', 'actions', array(
41 'actions' => array(
42 'edit' => array()
Capítulo 3: Admin Bundle 18
43 )))
44 ;
45 }
46 }
Truco 3
Es posible que te guste tener la parte del admin completamente centralizada en tu bundle y no quieras
depender del archivo de servicios que está en la carpeta app. Esto se consigue con la inyección de
dependencias de una forma muy simple. Si creas un nuevo bundle, esta clase ya te viene creada por
defecto. Puedes probarlo con este comando:
1 app/console generate:bundle
Pero sin duda, la mejor forma de aprender es “trasteando” (y rompiendo). Para ello, te dejo la
documentación necesaria en este¹⁵ enlace. Recuerda modificar la parte de XML por YAML:
Resumen
En este capítulo hemos aprendido a instalar el Admin Bundle del proyecto Sonata y a crear nuestra
primera clase aplicada al administrador. Durante el siguiente capítulo instalaremos la gestión de
usuarios basada en este administrador que nos dará control completo sobre ellos además de securizar
el recién instalado admin.