[Manual-PHP] Creando un proyecto MVC con Framework Kohana PHP parte III

Usando Vistas y variables en Kohana PHP Framework

Cuando trabajamos con el framework Kohana PHP, una parte muy importante son las vistas, ya que son unos de los pilares del MVC, el cual es altamente utilizado por el framework.

Las vistas son archivos con extensión .php las cuales están pensadas para mostrar contenido, y también existe un modulo que nos permite utilizar plantillas smarty, pero hoy no tocaremos ese tema, estos archivos estarán alojados en ruta_de_instalacion_/application/views/ y pueden contener código Php, aunque la idea es de que dicho código sea lo más pequeño  y simple posible, y sea solo para mostrar resultados por ejemplo de una consulta.

Como vimos en la segunda entrega de este manual, para mostrar algo es imprescindible usar una vista, he invocarla desde nuestro controlador, mediante el método estatico View::factory.

01<?php defined('SYSPATH') or die('No direct script access.');
02
03class Controller_Tienda extends Controller {
04
05 public function action_index()
06 {
07
08 $vista = View::factory('template');
09 $this->request->response = $vista;
10
11 }
12
13} // End Tienda

Ahora bien como es de suponerse, podemos enviar datos a nuestra vista para poder mostrarlos en ella, esto nos sirve para por ejemplo enviar un array a nuestra vista y recórrelo para mostrar algún resultado de una consulta.

Hay varias formas de enviar datos a nuestra vista, veamos cuales son:

Mediante Bind o Set
, de esta forma podemos pasar una variable, sin importar su valor a nuestra vista y puede ser un string, entero, un array o un objeto y se encadena a nuestro método estático de View::factory, cabe señalar que la única diferencia entre bind y set es que bind asigna la variable por referencia, en lo personal casi no la uso, ya que set satisface mis tareas.

La otra opción es mediante variables globales y para ellos se pueden utilizar dos métodos estáticos (uno se usa como set y otro como bind), los cuales son View::set_global y View::bind_global, la diferencia con las dos formas anteriores es que con estos métodos se crean variables globales que pueden ser usadas por cualquier vista, sin tener que especificar alguna vista en especifico.

Ahora veamos cómo usarlas, como nota, solo voy a mostrar set, ya que como indique no he usado ni he necesitado usar bind, si quieren ver el funcionamiento de bien, simplemente reemplazan set por bien y listo XD.

Usando método set.

controlador.php

01<?php defined('SYSPATH') or die('No direct script access.');
02
03class Controller_Tienda extends Controller {
04
05 public function action_index()
06 {
07
08 $user = 'Ajaxman';
09 $vista = View::factory('template')->set('username',$user);// Asignamos $user a una nueva variable $username;
10 /* tambien podemos enviar muchas de la siguiente forma
11 *
12 * $vista = View::factory('template')
13 ->set('username',$user)
14 ->set('edad','18 Años')
15 ->set('pais','mexico'); Y asi podemos seguir enviando mas variables a dicha vista
16 */
17
18 $this->request->response = $vista;
19 }
20
21} // End Tienda

Vista template.php

01<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
02 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
03
04<html xmlns="http://www.w3.org/1999/xhtml">
05<head>
06 <title>Vista para Kohana PHP</title>
07</head>
08<body>
09<h1>Bienvenido <?php echo $username; ?><h1>
10 <p>Hola esta es una vista para Kohana PHP</p>
11</body>
12</html>

Lo anterior mostraría Bienvenido Ajaxman, y de esta forma pueden mandar un array o un objeto(resultado de una consulta), recórrelo mediante foreach y mostrar el resultado del mismo.

Ahora bien para las variables globales solo hay que definirlas con el siguiente método estático y podemos usarlas en cualquier vista que carguemos.

Y algo que se me olvidaba pero igual es muy importante el método estático View::factory se puede usar también dentro de la vista, pero debemos usar un método render para que se envié la salida en pantalla, en el código que sigue veremos cómo usarlo.

controlador.php

view source

print?

01<?php defined('SYSPATH') or die('No direct script access.');
02
03class Controller_Tienda extends Controller {
04
05 public function action_index()
06 {
07
08 $user = 'Ajaxman';
09
10 View::set_global('titulo','Bienvenido '.$user);
11 View::set_global('keywords','Php,Kohana,Framework, prueba');
12
13 $vista = View::factory('template'); //Notese que no enviamos nada ya que son variables globales
14
15 $this->request->response = $vista;
16 }
17
18} // End Tienda

Leave a Comment

Your email address will not be published. Required fields are marked *