Anulación de un controlador central de Pimcore

· 4 min de lectura

He estado trabajando en un proyecto Pimcore desde hace algún tiempo, nunca toqué PHP y Symfony en mi vida, así que ha sido un gran desafío.

La documentación es excelente, quiero decir, en serio, es excelente, pero parece que no está hecha para principiantes en el lenguaje/framework, así que todo lo que hice tuve que tomar notas de ello.

Después de enterarme de que se puede ampliar Pimcore mediante el uso de paquetes, pasé horas y horas intentando anular controladores, métodos de JavaScript y más cosas.

Entonces, en esta publicación explicaré cómo logré anular un controlador. Cómo anular archivos javascript se explicará más adelante 😎.

Creando el paquete

En primer lugar, necesitamos crear un paquete para ello, es bastante simple como está documentado en la [documentación de Pimcore] (https://pimcore.com/docs/pimcore/current/Development_Documentation/Extending_Pimcore/Bundle_Developers_Guide/index.html), solo necesitamos ejecutar bin/console pimcore:generate:bundle --namespace=EmiDemo/EmiDemoBundle en la carpeta del proyecto.

Generará algunas preguntas, pero no hay nada de qué preocuparse.

Creará una nueva carpeta bajo la carpeta src con el espacio de nombres que declaramos antes, y dentro tendremos todos los archivos necesarios para el paquete.

Además, el sitio de administración de Pimcore detectará el complemento, pero estará deshabilitado, debe habilitarlo para comenzar a usarlo.

Anulando un método desde un controlador

Para anular un método en un controlador, primero obviamente necesitas encontrar la acción que deseas actualizar, esto parece fácil pero te daré la forma que suelo hacer (aprendida de mi compañero de equipo Cesar).

Primero vaya a la página en la que cree que el controlador realiza la acción, en mi caso quiero verificar la que se carga cuando abrimos un activo.

Imagen de Gyazo

Luego simplemente abre la consola y ve a la pestaña de red, vuelve a realizar los mismos pasos e intenta encontrar la acción.

Imagen de Gyazo

Con esta información puedes ver que la acción que carga el activo es http://localhost/admin/asset/get-data-by-id?_dc=1607601778450&id=2&type=image. De eso podemos ver que la acción del controlador es get-data-by-id.

Encuentra la acción en el controlador central.

Para mí, la forma más sencilla de hacerlo es simplemente buscar en todos los archivos en Visual Studio Code.

Imagen de Gyazo

Probablemente encontrará más de uno así que debes echarle un vistazo y decidir cuál es, en nuestro caso estamos trabajando con activos por lo que está claro que queremos usar el AssetController.php.

Modificar el controlador central

Depende del desarrollador, normalmente no lo hago porque es más rápido simplemente anular el controlador y desarrollar desde allí. Pero recomendaría primero actualizar el controlador en el paquete principal para ver si los cambios funcionan.

En nuestro caso simplemente devolveré un mensaje al comienzo del método para comprobar que funciona.

return $this->adminJson(['success' => false, 'message' => "Overriding the getDataByIdAction in the core!!"]);

Imagen de Gyazo

Luego recarguemos nuestro activo y revisemos la pestaña de red.

Imagen de GyazoMantengamos lo que tenemos allí, para que luego sepamos que estamos usando el mensaje del paquete en lugar del principal.

Ahora copiemos eso a un archivo temporal para realizar un seguimiento de lo que hicimos.

Mover esos cambios al paquete

Ahora, para mover esos cambios a nuestro paquete, primero necesitamos algunas cosas de nuestro controlador central:

  • Espacio de nombres
  • Importaciones
  • Nombre del controlador

Imagen de Gyazo

Y obviamente el método getDataByIdAction que es el que queremos anular.

Exponer el controlador

Necesitamos exponer el controlador, para hacer esto necesitas ir al archivo /src/EmiDemo/EmiDemoBundle/Resources/config/pimcore/routing.yml y agregar

options:
        expose: true

También necesitamos cambiar el controlador prefix por el que vamos a anular, en nuestro caso el controlador admin.

Entonces al final te verás así.

emi_demo_emi_demo:
    resource: "@EmiDemoEmiDemoBundle/Controller/"
    type:     annotation
    prefix:   /admin
    options:
        expose: true

Controlador predeterminado.php

En nuestro archivo, agregaremos las importaciones y extenderemos el controlador con el que anularemos

Imagen de Gyazo

Luego simplemente copiaremos el método del controlador central y, en nuestro caso, actualizaremos el mensaje que devolvemos.

Imagen de Gyazo

Si recuerdas, ya tenemos un mensaje en el controlador central: Overriding the getDataByIdAction in the core!! y ahora deberíamos ver Overriding the getDataByIdAction in the bundle!!

Imagen de Gyazo

Simplemente no devolvamos nada y veamos que ahora podemos ver la página como era antes.

Imagen de Gyazo

Comente la declaración de devolución y vuelva a cargarla.

Imagen de Gyazo

Eso es todo

Y con esta pequeña demostración podrá ver lo fácil que es anular un controlador central Pimcore existente. Hay algunos pasos que debes seguir pero no es nada difícil. Sólo asegúrese de exponer el controlador y borrar el caché de vez en cuando mientras realiza cambios; a veces se almacena en caché y usted se queda atascado pensando que no funciona y simplemente está almacenado en caché.

Si se pregunta cómo anular los archivos javascript, lo encontrará en otro tutorial 😁.