Elementos reusables con requestAction
Esta técnica te permitirá hacer elementos que pueden ser utilizados sin necesidad de enviarle datos desde un controlador. Esto los hace realmente reusables y autocontenidos. Esta técnica utiliza requestAction y caching de vistas para hacerla más eficiente.
En un proyecto que estoy desarrollando actualmente he decidido utilizar la técnica de elementos reusables. El gran beneficio de esta técnica es que el elemento puede ser reutilizado en otras vistas sin necesidad de enviarle datos desde el controlador ya que el elemento se encarga (por medio de requestAction) de obtener la información que requiere.
El único problema de esta técnica es que requestAction representa un golpe fuerte a la velocidad de procesamiento de la página, pero se puede solucionar de una manera sencilla:
Para usar requestAction sin temor de aumentar innecesariamente el número de request al servidor es necesario hacer uso del sistema de caching que CakePHP ofrece.
La aplicación que estoy desarrollando tiene en la página principal un listado de categorías que son las que hacen uso de este método, veamos primero el código elemento (APP/views/elements/categories.ctp):
$categories = $this->requestAction("categories/index");
?>
<ul class="top-category-list">
<?php foreach ($categories as $category): ?>
<li>
<?php
echo $html->link(
$category["Category"]["name"],
array(
"controller" => "categories",
"action" => "view",
$category["Category"]["id"]
)
);
?>
</li>
<?php endforeach ?>
</ul>
Como puedes ver, la lista de categorías provienen de una llamada a requestAction a CategoriesController::index el cual se comporta distinto (hace return) si el método fue solicitado por medio de requestAction (APP/controllers/categories_controller.php):
class CategoriesController extends AppController {
var $name = "Categories";
var $helpers = array("Html", "Form");
function index() {
$this->Category->recursive = 0;
$categories = $this->paginate();
if(isset($this->params["requested"])) {
return $categories;
}
$this->set(compact("categories"));
}
…
?>
De este modo tenemos un elemento que sin importar en qué vista se encuentre va a mostrar los datos correctos ya que es él quien se encarga de obtenerlos. Por último, como les había dicho antes, les muestro la manera en que se puede usar el elemento utilizando el caching de CakePHP (cualquier vista):
De este modo obtenemos la lista de categorías pero el requestAction se ejecuta sólo una vez hasta que el cache venza (en este caso 365 días ya que se que esa lista no cambiará en ese tiempo). El formato de tiempo para el caché es el mismo que la función de PHP strtotime.
Artículo en inglés sobre elementos reusables: acá.
Recibe otros artículos como este automáticamente
Suscríbete vía RSS a aikon.com.ve ||
¿Qué es RSS?