Clases Adapters

Estructura Basica
Veremos una estructura basica para una clase adaptadora.
<?php
namespace index\adapters;

/**
 * Siempre debera extender de \agenor\mva\Adapter o alguna clase que extienda
 * de esa.
 */
class BasicAdapter extends \agenor\mva\Adapter
{
    
/**
     * Siempre que exista es el primer metodo del adaptador en ejecutarse.
     */
    
public function init()
    { }
    
    
/**
     * Debera existir y solo se ejecutara cuando es llamado o no se define en la url
     * el metodo a ejecutar, es el metodo por defecto.
     */
    
public function indexAction()
    {  }
    
    
/**
     * Metodo del adaptador que sera ejecutado solo a peticion del usuario.
     */
    
public function metodoAction()
    {
      
// Pueden existir varios metodos Action   
    
}
    
    
/**
     * Siempre que exista es el ultimo metodo del adaptador en ejecutarse.
     */
    
public function post()
    { }    
}

El Router, una vez que identifica al adaptador, ejecuta el metodo init a continuacion el metodo solicitado y luego si existe el metodo post. Tener en cuenta que si se requiere realizar alguna accion antes de instanciar el adaptador o despues se deberan usar los plugins.

Atributos disponibles
protected: $this->_view
Nos retorna la vista que tiene asociada el adaptador, con la cual se le pasaran los valores para que luego renderizara la plantilla.

protected: $this->_model
Nos retorna el modelo asociado en caso de existir, para un levantado automatico el nombre del adaptador y del modelo deben coincidir sin considerar los PostFijos.

protected: $this->_router
Contiene el Enrutador del sitio, se utiliza para alguna funcion especial.

protected: $this->_rutaRelativa
Contiene la url sin la parte del sitio o sea modulo/adaptador/accion.

protected: $this->_args
Contiene todos los valores pasados por POST, GET o URL.

Metodos disponibles usados por el sistema
$this->setView(void) : agenor\mva\Adapter
Configura una vista para el adaptador, primero intenta ver si el sistema ya tiene una vista disponible si es asi toma esa, de lo contrario crea una vista. Es usada por el sistema, pocas veces necesitaremos recurrir a este metodo.

$this->setModel(string $modulo, string $controlador) : void
Configura el modelo por defecto para el adaptador, este metodo tambien es usado por el sistema y pocas veces recuriremos a el.

$this->setRouter(\agenor\mva\Router $router) : void
Configura el router del sistema en el adaptador.

  NOTA :
Si bien dice metodos disponibles usados por el sistema, el usuario puede hacer uso de los mismos, lo unico que se recomienda prestar atencion al utilizarlos.

Metodos disponibles para el usuario
$this->getRouter() : agenor\mva\Router
Nos retorna el enrutador del sistema. Mas adelante veremos que se puede hacer con el.

$this->getView() : agenor\mva\View
Nos retorna la vista asociada al Adaptador en ejecucion.

$this->getAll(string $tipo='') :  array
Retorna todos los parametros del tipo definido en $tipo (URL,GET,POST) ya sanitizados, en caso de no definirse tipo retorna todos los tipos juntos.

$this->getArgUrl(string $nombre, mixed $default = false) : mixed
Nos retorna un parametro pasado por URL conociendo su nombre y en caso de no encontrarlo nos retorna el valor $default, el valor se encuenra sanitizado.

$this->getArgPost(string $nombre, miced $default = false) : mixed
Nos retorna un parametro pasado por POST conociendo su nombre y en caso de no encontrarlo nos retorna el valor $default, el valor se encuenra sanitizado.

$this->getArgGet(string $nombre, mixed $default = false) : mixed
Nos retorna un parametro pasado por GET conociendo su nombre y en caso de no encontrarlo nos retorna el valor $default, el valor se encuenra sanitizado.

$this->isAjax() : boolean
Comprueba si se realizo o no una peticion ajax y retona un booleano de acuerdo al resultado. (true: ajax, false: comun).-

$this->buildUrl(string $modulo, string $adaptador, string $accion, Array $params = array(),string $http = 'http://') : string
En base a los parametro ofrecidos construye una url que puede utilizarse para generar enlaces. Es conveniente el uso del mismo pues nos permitira mantener consistencia en las urls.

$this->getDirModulo() : string
Retorna la ruta completa hasta el directorio del modulo en ejecucion.

$this->changeAction(string $accion, string $adaptador = null) : void
Cambia en tiempo de ejecucion el controlador y la accion solicitadas dentro del modulo en ejecucion, se deber tener cuidado pues a estas alturas ya estamos en el adaptador, por lo cual el metodo y adaptador solicitado deberan utilizar la misma configuracion o el nuevo no debe utilizar ninguna configuracion adicional.

$this->getUrlModulo(string $tipo = 'css') : string
Retorna la url completa dentro del modulo en ejecucion para archivos vista de los tipos, css, js, phtml, si se pasa null entonces se pasa la url hasta el directorio de las vistas.

$this->getUrlCss(string $archivo) : string
Retorna la url completa para un archivo css del modulo en ejecucion, el nombre del archivo debera ser sin la extencion.

$this->getUrlJs(string $archivo) : string
Retorna la url completa para un archivo js del modulo en ejecucion, el nombre del archivo debera ser sin la extencion.

$this->getUrlLayout(string $dir, string $file) : string
Retorna la url completa a un archivo ubicado dentro del directorio de temas de plantilla.
$dir contendra el directorio dentro del tema ej. js, css, phtml etc
$file es el nombre del archivo con la extencion incluida.

Comunicando el Adaptador con el modelo
Para comunicar el adaptador con el modelo por defecto, simplemente se tomara el atributo $_model y se llamara al metodo que deseamos.
$usuarios = $this->model->getAllUsers();


Pasando datos del Adaptador a la vista
Toda relacion de pasaje de datos con la vista se realiza a traves del atributo $_view. Contamos con 3 formas para realizar dicha accion:
1 - Por array directo.
2 - Por array inyectado.
3 - Por atributos publicos magicos.

1 > Array Directo : Como veremos mas adelante la vista implementa ArrayAccess, lo cual nos permite trabajar la clase como si fuera un arreglo comun, es decir podremos cargar datos a la vista a traves de la siguiente sintaxis:
    // En el adaptador cargamos la vista:
    $this->_view['nombre'] = 'Agenor';
    // En la vista mostramos de la siguiente manera:
    <?php echo $this['nombre']; ?>
    // A partir de la version 0.6.7 se puede realizar:
    <?php echo $nombre; ?>
Esta ultima forma se implemento para proporcionar mayor simplicidad en las plantillas ya que no es necesario anteponer $this en cada variable.
Creemos que mejorara la legibilidad de la plantilla, aunque se mantendran las otras formas de acceso a variables.

2 > Array Inyectado : Simplemente vamos cargando un arreglo y al final se lo pasamos a traves del metodo render.
    // En el adaptador generamos un arreglo:
    $arreglo['version'] = '0.6.5';
    $arreglo['fecha]    = '23/02/2014';
    // Pasamos los datos a la vista en el momento de renderizar.
    $this->_view->render($arreglo);
    // En la vista mostramos de la siguiente manera:
    <?php echo $this->version; ?>
    <?php echo $this->fecha; ?>


3 > Atributo publico magico : Vamos incluyendo datos en la vista, como si se tratara de atributos publicos, como la vista implementa __set, luego tendremos disponible el valor.
    // En el adaptador vamos cargando la vista:
    $this->_view->version   = '0.6.5';
    $this->_view->fecha      = '23/02/2014';
    // En la vista mostramos de la siguiente manera:
    <?php echo $this->version; ?>
    <?php echo $this->fecha; ?>
    

 NOTA :

La opcion 2 array inyectado, no nos permite olvidarnos de enviar a renderizar como ultimo paso de un metodo del adaptador. Pues si olvidamos ese paso, el sistema renderiza solo la vista pero envia un arreglo vacio.

Default Callout

This is a default callout.

Primary Callout

This is a primary callout.

Success Callout

This is a success callout.

Info Callout

This is an info callout.

Warning Callout

This is a warning callout.

Danger Callout

This is a danger callout.