Crear Controlador y Layout personalizado en Magento 2
En este tutorial vamos a aprender a crear un controlador en el frontend
con una ruta personalizada, además de crear un layout
que aparecerá en nuestra página cuando accedamos a nuestro controlador.
El primer paso que haremos es crear nuestro controlador en un nuevo módulo. En nuestro caso el módulo será JLNarvaez_CustomLayout
.
Crearemos el controlador en la siguiente ruta:
app/code/JLNarvaez/CustomLayout/Controller/Saludo/Index.php
A la hora de crear nuestro controlador, la única obligación es que esté en la carpeta Controller
. El árbol que queramos crear dentro es decisión nuestra.
El siguiente paso sería crear nuestro routes.xml
que nos servirá para registrar la ruta (en este caso en el frontend
).
app/code/JLNarvaez/CustomLayout/etc/frontend/routes.xml
router
id
=> Le pondremosstandard
en este caso, ya que queremos que apunte a la partefrontend
.
route
frontName
=> Este atributo nos servirá para especificar la URL que tendrá nuestro controlador. La URL a la que accederemos en el controlador está formada de la siguiente manera:http://ejemplo.com/frontName/carpetaControlador/accionControlador
.id
=> Nos servirá para identificar el layout xml que crearemos para visualizar contenido al acceder en nuestro controlador. El nombre del XML deberá ser:routerId_carpetaControlador_accionControlador.xml
,module
name
=> Deberemos especificar el nombre de nuestro módulo.
Lo próximo que haremos será crear nuestro layout, nombrándolo tal y como hemos explicado en el esquema anterior (teniendo en cuenta el id
especificado en el elemento route
).
En nuestro caso estará formado de la siguiente manera:
app/code/JLNarvaez/CustomLayout/view/frontend/layout/layoutid_saludo_index.xml
Como vemos en el anterior XML, he añadido un block
con un template que he creado para hacer la prueba, y que muestre algo por pantalla.
Para crear este template lo único que tendremos es que añadir un archivo phtml
de la siguiente manera:
app/code/JLNarvaez/CustomLayout/view/frontend/templates/saludo.phtml
Con esto ya tendríamos un Controlador creado, con nuestro layout personalizado, al cual podremos acceder con la siguiente ruta:
http://ejemplo.com/prueba/saludo/index
IMPORTANTE: En el caso de que nuestro árbol dentro de la carpeta Controller
sea más grande (por ejemplo: Controller/Saludo/Hola/Index.php
las carpetas dentro de Controller
se indicarán en la URL separadas por _
. En este caso sería http://ejemplo.com/prueba/saludo_hola/index
). Con esto queremos decir que la URL siempre estará formada por tres partes: frontName/carpetasControlador/accionControlador
.