Crear el primer controlador con Alxarafe para Alixar (fork de Dolibarr)

Para este punto del programa, se necesita tener instalado Alxarafe 0.0.7 o superior. Seguimos avanzando en Alxarafe conforme avanzamos en Alixar.

El Dispatcher.

El dispatcher es una clase que realiza dos funciones básicas:

  • Define las constantes de la aplicación.
  • Determina qué controlador va a ser utilizado en función de las variables que se pasen por POST.

Por defecto, Alxarafe utiliza las variables call para el nombre de la clase (que deberá de existir en la carpeta Controller), y run para el nombre del método a ejecutar.

Por ejemplo:

https://www.alxarafe.com?call=controlador&run=método

Nosotros no queremos interferir esa forma de trabajo, pues empezaremos a usarla ahora, pero queremos mantener la opción de hacer un include del archivo de Dolibarr como hasta ahora, de manera que si usamos call se cargará la clase, y si usamos controller, se hará el include.

https://www.alxarafe.com?controller=carpeta&method=fichero

Para hacer ésto, en la carpeta Helpers, hemos creado una clase llamada AlixarDispatcher que extiende el Dispatcher original de Alxarafe.

Si analiza el código de AlixarDispatcher, comprobará que es muy sencillo. Sólo tiene 2 métodos:

  • defineConstants(), que simplemente invoca al parent para definir las constantes de Alxarafe, y posteriormente define las propias.
  • process(), que primero lanza el process del Dispatcher de Alxarafe, y si tiene éxito returna true; si no tiene éxito, intenta localizar el archivo a usar para el include, poniendo su nombre en la variable $this->path, ya que deberá de incluirse desde el index.php y no dentro de la clase.

El controlador.

El controlador no es más que una clase que extiende de \Alxarafe\Base\Controllers.

Probaremos con este código:

class AdvancedAccountancy extends \Alxarafe\Base\Controller
{
public function run()
{
echo 'main in AdvancedAccountancy';
}
public function try2()
{
echo 'try2 in AdvancedAccountancy';
}
}

Sólo con crear este controlador dentro de la carpeta Controllers, ya tendremos disponible las siguientes direcciones:

https://www.alxarafe.com?call=AdvancedAccountancy

https://www.alxarafe.com?call=AdvancedAccountancy&run=try2

Observe que en el primer caso, es indistinto poner &run=run, porque por defecto, si no se indica nada, asumimos que se ejecuta el método run.

Pronto veremos cómo utilizar las vistas con Twig y empezaremos a simplificar la estructura de Dolibarr para mejorar la puntuación de Scrutinizer.

Recuerde que puede seguir la evolución del código, y colaborar en los avances, en:

https://github.com/alxarafe/alixar

Establecer un único punto de entrada

El primer cambio significativo que hacemos en Alixar (partiendo de una copia del ERP Dolibarr 10), es crear un único punto de entrada.

Alixar, a diferencia de Dolibarr, sólo tendrá un punto de entrada, que será el fichero index.php de la carpeta principal. En Dolibarr, se ejecutan las distintas opciones de la aplicación ejecutando directamente el archivo correspondiente.

La forma en que lo hace Dolibarr supone al menos 2 problemas graves:

  • Puede resultar más fácil de piratear, al tener que controlar muchos puntos de entrada
  • Cada vez que se necesita acceder a un archivo común, hay que tener en cuenta que la aplicación se ejecuta desde distintas carpetas, por lo que al desconocer el punto de entrada, necesitamos saber la ruta desde el fichero en ejecución.

El principal problema, es que supone un cambio muy importante en la forma en que funciona la aplicación, y por lo tanto es complicado de hacer sin romper el código.

El código quedará roto durante algunos días hasta que sea completado el proceso, y aún así, no habrá garantías de que todos estén arreglados.

¿Cómo se consigue tener un único punto de entrada?

Para conseguir un único punto de entrada, las rutas originales de Dolibarr quedan renombradas de la siguiente forma:

www.dolibarr.com/htdocs/societe/card.php?action=create

quedaría de la siguiente forma.

www.alixar.com/?controller=societe&method=card&action=create

Podría darse el caso de que hubiese más niveles de anidamiento, por ejemplo compta/bank/card.php pasaría a ser ?controller=compta/bank&method=card.

Como se puede comprobar, este cambio supone cambiar todos los enlaces, en todas las páginas y menús al nuevo formato.

Puede revisar la evolución del código en el repositorio oficial:

https://github.com/alxarafe/alixar