Php

[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.

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Tienda extends Controller {

 public function action_index()
 {

 $vista = View::factory('template');
 $this->request->response = $vista;

 }

} // 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

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Tienda extends Controller {

 public function action_index()
 {

 $user = 'Ajaxman';
 $vista = View::factory('template')->set('username',$user);// Asignamos $user a una nueva variable $username;
 /* tambien podemos enviar muchas de la siguiente forma
 *
 * $vista = View::factory('template')
 ->set('username',$user)
 ->set('edad','18 Años')
 ->set('pais','mexico'); Y asi podemos seguir enviando mas variables a dicha vista
 */

 $this->request->response = $vista;
 }

} // End Tienda

Vista template.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>Vista para Kohana PHP</title>
</head>
<body>
<h1>Bienvenido <?php echo $username; ?><h1>
 <p>Hola esta es una vista para Kohana PHP</p>
</body>
</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

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Tienda extends Controller {

 public function action_index()
 {

 $user = 'Ajaxman';

 View::set_global('titulo','Bienvenido '.$user);
 View::set_global('keywords','Php,Kohana,Framework, prueba');

 $vista = View::factory('template'); //Notese que no enviamos nada ya que son variables globales

 $this->request->response = $vista;
 }

} // End Tienda

Leer más

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

Bien esta es la continuación al manual de “Creando un proyecto MVC con Framework Kohana PHP parte I“, y ahora veremos un acercamiento más profundo al MVC.

Bien vamos a continuar con el proyecto que teníamos en la parte anterior, y sobre ese mismo trabajaremos, ya teníamos nuestro controlador y nuestro modelo.

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Tienda extends Controller {
/**
 * Controller_Tienda Es el controlador por default recuerden el bootstrap
 * todos los controladores llevan esta sintaxis, Controller_<Nombre_del_controlador>
 *
 *&nbsp; action_index() Es la acción por default (ejemplo http://localhost/tienda/accion)
 *&nbsp; si no se especifica en la url (ejemplo http://localhost/tienda/accion, se usara
 *&nbsp; index por default y la sintaxis es action_<nombre_de_la_accion>
 */
 public function action_index()
 {
 echo "Programando ....";
 }

} // End Tienda

Algo que debemos tener en cuenta en Kohana PHP es que existen dos tipos de controladores padres (parents) de los cuales podemos extender a nuestros controladores con los que trabajemos y eventualmente podemos crear más a nuestro gusto, pero de momento solo veremos los que podemos usar por default en Kohana PHP.

Controlador “Controller”, este es el controlador que usamos en el ejemplo de la parte uno y el cual está arriba, al extender nuestra clase de este controlador hacemos que funcione todo lo necesario para trabajar con Kohana, digamos que es el normal, y lo correcto para mostrar una salida en pantalla es usar la variable publica $this->request->response, y a esta se le asigna lo que necesitemos mostrar, lo cual regularmente debe de ser y será una vista.

Controlador “Controller_Template” este al igual que el anterior, permite que las clases que extiendan de el, tengan toda la funcionalidad de una clase controladora de Kohana, la grand diferencia, con la anterior, es que esta clase necesita una vista por default, la cual será rendereada o interpretada/mostrada automáticamente.

Ahora veamos las vistas para explicar los puntos anteriores.

Una vista es un archivo php(se puede llegar a usar plantillas Smarty mediante un modulo), alojado en ruta_de_instalacion/application/views el cual regularmente es un archivo que contiene un poco de código PHP y código HTML el cual nos permite mostrar nuestra aplicación Web.

Para poder cargar una vista es necesario usar el método View::factory($vista_name);, donde $vista_name es el nombre del archivo sin la extensión.

Hagamos un ejemplo usando los métodos anteriores para ello usaremos este código HTML casi vacío.

Nombre: PATH_INSTALACION/application/views/template.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>Vista para Kohana PHP</title>
</head>
<body>
 <p>Hola esta es una vista para Kohana PHP</p>
</body>
</html>

Leer más

[PHP - Senior] Usando los métodos magicos __construct y __destruct en PHP

En PHP 5 se incluyeron varios métodos mágicos como __construct y __destruct a las clases los cuales no facilitan la forma de programar.

Y bien si no sabes que son estos métodos, aquí los veremos para que te des una idea de como usarlos y para que sirven.

Imaginemos el siguiente código que nos servirá para mostrar los datos de un usuario

<?php
class User {
  private $name;
  private $link;
  private $pais;

  public function setData($name = '', $link = '', $pais = '')
  {
    $this->name = $name;
    $this->link = $link;
    $this->pais = $pais;
  }

  public function getData()
  {
    echo "Nombre::".$this->name."\n";
    echo "Link::".$this->link."\n";
    echo "Pais::".$this->pais."\n";
  }
}

$user = new User();
$user->setData('Ajaxman','http://www.ajaxman.net','Mexico'); // Lease User,Link,Pais
$user->getData();
?>

Hasta ahí todo bien,sin embargo si vemos el código notamos que tenemos el método setData unicamente para asignar datos, esto se podría hacer de esta forma

<?php
$user = new User('Ajaxman','http://www.ajaxman.net','Mexico');// Lease User,Link,Pais
$user->getData();
?>

Y si queremos que funcione simplemente hay que llamar a un método igual que el nombre d e la clase de la siguiente forma.


<?php
class User {
  private $name;
  private $link;
  private $pais;

  public function User($name = '', $link = '', $pais = '')
  {
    $this->name = $name;
    $this->link = $link;
    $this->pais = $pais;
  }

  public function getData()
  {
    echo "Nombre::".$this->name."\n";
    echo "Link::".$this->link."\n";
    echo "Pais::".$this->pais."\n";
  }
}

?>

Ahora bien, desde que surgió PHP5 se puede usar métodos mágicos, uno de ellos es __construct el cual se ejecuta cuando se inicia la carga de la clase, la ventaja es que siempre se debe de llamar así y no tendrás que estar poniendo métodos con el mismo nombre de la clase y quedaría así.

Leer más

[PHP] Métodos estáticos en PHP

Este es un post de PHP, ya que si bien es lo que mejor manejo y ademas de que casi no hay posts de PHP en mi blog.

Bien empecemos por el principio.

Cuando estamos programando a veces no deseamos estar instanciando una clase, ya que puede que el método sea algo que simplemente devuelva algún valor, por ejemplo un parser o similar, entonces se vuelve tedioso estar haciendo, $obj =new Clase();, la solución para esto es usar un método estático.

Los métodos estáticos no necesitan ser instanciandos ademas de que son ligeramente mas rápido que los métodos normales, si bien esto no significa que debamos de dejar de usar los métodos normales, estos pueden ser muy útiles para hacer por ejemplo una especie de catalogo de funciones, aunque claro su uso depende de cada quien.

Veamos una clase con un método normal y posteriormente como seria si fuera estático.


<?php
 //Clase
class Tools{
  /// Metodo normal
  public function today($paramString = '')
  {
    setlocale(LC_ALL,'es_MX');
    $date = $paramString.utf8_encode(strftime("%A %d de %B del %Y"));
    return $date;
  }
}
$Helps = new Tools();
echo $Helps->today("Hoy es "); //Salida  Hoy es jueves 29 de julio del 2010
?>

Ahora veamos como se haría usando un método estático


<?php
 //Clase
class Tools{

 /// Metodo estatico
 public static function today($paramString = '')
 {
   setlocale(LC_ALL,'es_MX');
   $date = $paramString.utf8_encode(strftime("%A %d de %B del %Y"));
   return $date;
 }
}

echo Tools::today("Hoy es "); //Salida  Hoy es jueves 29 de julio del 2010

?>

Como podemos ver es mas simple llamarlo, claro que como menciono hay algunas cosas a tener en cuenta, las mas importantes son:

  • No existen los métodos “mágicos” __construct ni __destruct, puesto que jamas se instancia la clase, en su lugar se puede invocar otro método estático que asigne, las variables
  • No existe $this, se debe usar en su lugar self, aunque las variables tienen que ser igualmente estáticas, esto se aplica tanto en variables como métodos

Haremos un ejemplo un poco mas complejo para ver como usar self en vez de this

Leer más

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

Hagamos un ejemplo muy bien explicado sobre cómo usar el Framework Kohana PHP con MVC usando ORM entre otras cosas, para que vean para que sirve y todo lo que pueden hacer con el

Ya sabemos cómo instalarlo ahora procedamos a trabajar.

Como ejemplo haremos una aplicación que liste productos, maneje altas y bajas de una tienda con un Front-End y un Back-End.

Para empezar necesitamos lo siguiente

*Requisitos

  • Apache (ModRewrite instalado)
  • PHP 5.2
  • MySQL
  • Kohana 3 Framework

*Opcionales

  • SQlFront
  • Phpmyadmin
  • Editor de código como Webuilder (Luego veremos cómo hacer casi lo mismo con Netbeans un IDE completo)

Haremos una nueva instalación de Kohana, en nuestra PC que será nuestro servidor (localhost) copiamos el contenido del framework a una carpeta que se llame tienda (en mi caso E:/www/tienda/)

Y acceso a mi website escribiendo http://localhost/tienda/  y ahí veremos nuestro install ahora navegamos hasta  E:/www/tienda/ y ahí estará ese archivo, lo borramos (si todo salió ok, si no corregir y verificar hasta que todo este en verde)

Esta vez vamos empezar por los datos para que al final hagamos el website.
Necesitamos una tabla de productos usaremos el siguiente SQL con los datos básicos de cada producto.

Como regla general hay que tener en cuenta que la base de datos debe de tener las siguientes características:

  • Nombre de la tabla en Plural (“productos”)
  • Nombre de los campos en Singular (“descripción”)
  • La clave principal se llamara id, en minúsculas (Se puede poner otra cosa pero habría que editar nuestra clase que manejara esa tabla por ello lo dejaremos como id)

CREATE TABLE `productos` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nombre` varchar(255) DEFAULT NULL,
 `descripcion` text,
 `activo` int(1) DEFAULT '1',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Agregamos el siguiente contenido

INSERT INTO `productos` VALUES (1,'Agua Debian','Agua Embotellada 1 Lts Marca Debian',1);
INSERT INTO `productos` VALUES (2,'Refresco Php','Refresco 2 Lts Marca Php Sabor Uva',1);
INSERT INTO `productos` VALUES (3,'Paleta Ubuntu','Paleta Ubuntu sabor Cafe 1pza',1);

Ahora editaremos nuestro bootstrap   (E:/www/tienda/application/bootstrap.php)
Buscaremos el configuración del init y escribiremos los siguiente

<?php
//...
//...
Kohana::init(array(
 'base_url'   => 'http://localhost/tienda/',//Aqui le decimos cual será la url del proyecto
 'index_file' => FALSE, //                  //Le indicamos que usara urls amigables (sin .php)
));
...
...
//Buscaremos el Route en el mismo script y lo editaremos
..
...
Route::set('default', '(<controller>(/<action>(/<id>)))')
 ->defaults(array(
 'controller' => 'tienda',  //Nombre del controlador por default
 'action'     => 'index',   //Acción por default (lo dejamos en index)
 ));

Lo guardamos (:wq XD ) y vamos a ver que en la raíz del proyecto hay una archivo llamado example.htaccess lo renombramos a .htaccess que será el que manejara las urls amigables para no tener el tienda/index.php/controlador ser tienda/controlador.

Les recomiendo comentar la siguiente línea para no tener problemas en las direcciones

# Installation directory
#RewriteBase /kohana/ pueden poner /tienda y va a funcionar pero es mejor quitarla
# ya que con ello evitaremos problemas cuando estemos cambiando de un servidor local
# a un servidor de producción

Lo guardamos (:wq XD )  Y ahora vayamos a crear nuestro controlador.

Entramos a E:/www/tienda/application/classes/controller y creamos tienda.php
Y creamos nuestro controlador

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Tienda extends Controller {
/**
 * Controller_Tienda Es el controlador por default recuerden el bootstrap
 * todos los controladores llevan esta sintaxis, Controller_<Nombre_del_controlador>
 *
 *  action_index() Es la acción por default (ejemplo http://localhost/tienda/accion)
 *  si no se especifica en la url (ejemplo http://localhost/tienda/accion, se usara
 *  index por default y la sintaxis es action_<nombre_de_la_accion>
 */
 public function action_index()
 {
 echo "Programando ....";
 }

} // End Tienda

Lo guardamos (:wq XD ) y naveguemos a http://localhost/tienda/ veremos que dirá “Programando ….”, si no vemos eso es que algo hicimos mal y hay que volver a ver en donde nos fallo

Ahora bien, procederemos a conectar la base de datos, para ello vamos a editar el archivo de configuración de la base de datos E:/www/tienda/modules/database/config/database.php

Y agregaremos la conexión mysql, pueden usar PDO(pero prefiero hacerlo como ejemplo de forma tradicional)

<?php defined('SYSPATH') or die('No direct access allowed.');

return array
(
 'default' => array
 (
 'type'       => 'mysql',
 'connection' => array(
 /**
 * The following options are available for MySQL:
 *
 * string   hostname
 * string   username
 * string   password
 * boolean  persistent
 * string   database
 *
 * Ports and sockets may be appended to the hostname.
 */
 'hostname'   => 'localhost',  ////Usa los datos de tu conexión MYSQL
 'username'   => "root",       ////Usa los datos de tu conexión MYSQL
 'password'   => "localhost",  ////Usa los datos de tu conexión MYSQL
 'persistent' => FALSE,        ////Opcional
 'database'   => 'kh_tienda',  ////Usa los datos de tu conexión MYSQL
 ),
 'table_prefix' => '',
 'charset'      => 'utf8',
 'caching'      => FALSE,
 'profiling'    => TRUE,
 ),
 //Aquí continúa con el PDO, ese de momento no hay que tocarlo
 //..
 //....
 //......
)

Ahora que ya lo tenemos vamos a decirle a kohana que agregue los módulos de base de datos y orm, necesarios para que funcione nuestro ejemplo, para ello hay que editar otra vez nuestro archivo bootstrap ya descomentar los módulos de manera que quede así.

Leer más

[Evento] Konference (Kohana Conference) en Londres el 15 de Mayo 2010

Ahora si a lo windows Woow.

Hasta hoy apenas me vengo enterando de esto, les platico rápidamente.

El 15 de Mayo de este año (2010), se llevara a cabo en Londres, una conferencia de desarrolladores del Framework Kohana:
KOnference – The London Kohana Conference 2010.

La verdad estoy con unas tremendas ganas de ir sin embargo dudo mucho que pueda, por que no creo que en la chamba me paguen la ida y pues ahorita no hay mucho presupuesto.

Kohana Konference

Me puse ha investigar y aquí les dejo la agenda, la cual se ve va a estar bien interesante.

  • Inicio || Duración || Sesión
  • 10:30 || 25″ || Registration
  • 10:55 || 5″ || Welcome
  • 11:00 || 55″ || Building Swiftly with Kohana 3 – KO3
  • 11:55 || 40″ || Designing for Scalability with HMVC – KO3
  • 12:35 || 15″ || Break
  • 12:50 || 35″ || Migrating existing codebases to Kohana – KO2
  • 13:25 || 30″ || Advanced ORM – theory and practice – KO3
  • 13:55 || 30″ || Lunch
  • 14:25 || 30″ || Discovery Session
  • 14:55 || 20″ || Rapid site prototyping – KO2
  • 15:15 || 30″ || Templating with Twig – KO3
  • 15:45 || 30″ || Break
  • 16:15 || 25″ || An introduction to using Gearman with Kohana – KO2
  • 16:40 || 20″ || Deploying Kohana on a large scale application – KO2
  • 17:00 || 10″ || Mukuru.com – Kohana meets E-Commerce
  • 17:10 || N/A- || Beers & dinner

Como ven habra platicas tanto de Ko3 como de Ko2, el unico pero que veo es que sera hasta Londres y pues es algo complicado ir.

Ojala y leyeran este post y pronto hagan una aunque sea en EUA.

Al parecer el costo sera de 15 GBP (Libras) (unos $300 MXN), el pago se realiza mediante Paypal y el registro sera a las 10:30 (Hora Local), recomiendan llegar a tiempo ya que como ellos dicen hay mucho que ver y el tiempo esta contado.

Pues ojala y eventos como este le den mas presencia a este increible framework y lo ayuden a crecer, por que se lo merece.

Mas info en los siguientes Links:
KOnference – The London Kohana Conference 2010

KOnference – The London Kohana Conference 2010 Calendar

Leer más

[Php] ¿Que es un ORM?

Pues como has visto en los últimos artículos de este blog he hablado mucho del famosísimo ORM que si bien aun me falta mucho, para poder usar todas sus características, lo poco que he aprendido a usarlo me ha resultado maravilloso.

El mapeo objeto-relacional u ORM (Object-Relational Mapping), una técnica de programación para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una base de datos relacional. En la práctica esto crea una base de datos orientada a objetos virtual, sobre la base de datos relacional. Wikipedia

Ose nos permite “pasar” una base de datos a programación orientada objetos, es decir tu solo te encargas de configurar tu conexión y mediante métodos puedes hacer los querys que quieras, y todo son objetos.

Existen muchos ORMS, para diferentes lenguajes de programación, pero obviamente nos enfocaremos a Php, y según se (no estoy 100% seguro) pero los ORMS están basados en Hibérnate de Java se supone que fue como el primer ORM.

En Php tenemos los siguientes ORMS:

Yo no he visto como trabajan cada una y se dé muy buenas fuentes que las mejores estan entre Doctrine y Propel.

Claro que depende de que desees hacer, de hecho aun no he probado bender-modeler pero por lo que veo es muy completa :-) (Y no es comercial he) ya que como dije va mas allá ya que te genera los modelos que usaras en tu bd automáticamente (incluidos getters y setter).

Voy a mostrar a que me refiero con todo esto del ORM desde la vista de Kohana ORM ya que es donde he trabajado y es muy fácil.

Antes que nada quiero aclarar que son solo ejemplos, prometo que después de esto seguirá nuestra primer MVC con base datos, ORMS y todo, esto solo es para que se den una idea de que hablo cuando digo que esta buenos los ORM´s.

Para empezar solo necesitamos crear nuestra tabla (p.ejem. ‘usuarios’), y crear un modelo con la siguiente sintaxis.

usuarios.php


<?php

class Model_Usuarios extends ORM {

}

?>

Leer más

Historico de entradas

febrero 2012
L M X J V S D
« ene    
 12345
6789101112
13141516171819
20212223242526
272829  

Ajaxman

Mi nombre es Javier, soy desarrollador web con especialización en PHP (avanzado), HTML, CSS y Javascript(Medio).

Me considero evangelizador de Kohana Framework, Mozilla Firefox y GNU/Linux Debian.

Estoy casado, y tengo dos hermosos hijos.

Todos los contenidos a menos que se exprese lo contrario estan bajo licencia Creative Commons.

Enlazanos!!

hit counters online counter