29
 19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter? 1/29 digitta.com/2009/12/empezando-con-kohana-mejor-que.html 15 i ci em e, 20 09 Empezando con Kohana, mejor qu CodeIgniter? He traducido este tutorial de NetTuts+ creado por Cristian Gilè sobre el  fra mewor PHP K ohana, al igual que hice en su día con el de CodeIgniter . Kohana es un  fra mework  de PHP5 que sigue la arquitectura MVC (Modelo-Vista Controlador). Hay varias razones por las que deberías elegir Kohana, pero la principales son seguridad, ligereza y simplicidad. En este tutorial, introduciré su características principales y, con una simple demostración, mostraré cuánt tiempo Kohana pued e ahorrarte potencialment e. Paso 1: ¿Qué es Koh ana? Kohana es un  fra mework  de PHP5 que sigue la arquitectura MVC. MVC mantien separada s la lógica d e la presentación. E sto permit e crear u n código más limpio ahorrar tiempo en la búsqueda de errores. Para los que no estén familiarizado con esta arquitectura: Un modelo representa datos sobre los que la aplicación opera Normalmente es una b ase de datos. Una ista contiene el código de presentación como HTML, CSS  J av aScript .

digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_

  • Upload
    pblo

  • View
    376

  • Download
    0

Embed Size (px)

Citation preview

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

1/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

15 iciem e, 2009

Empezando con Kohana, mejor quCodeIgniter?

HetraducidoestetutorialdeNetTuts+creadoporCristianGilèsobreel framewor

PHPKohana,aligualquehiceensudíaconeldeCodeIgniter.

Kohanaesun framework dePHP5que siguelaarquitecturaMVC(Modelo-Vista

Controlador).Hay varias razones por las que deberías elegirKohana, pero la

principalessonseguridad,ligerezaysimplicidad.Enestetutorial,introducirésu

características principales y, con una simple demostración, mostraré cuánt

tiempoKohanapuedeahorrartepotencialmente.

Paso1:¿QuéesKohana?

Kohanaesun framework dePHP5quesiguelaarquitecturaMVC.MVCmantien

separadaslalógicadelapresentación.Estopermitecrearuncódigomáslimpio

ahorrartiempoenlabúsquedadeerrores.Paralosquenoesténfamiliarizado

conestaarquitectura:

Un modelo representa datos sobre los que la aplicación operaNormalmenteesunabasededatos.

Una ista contiene el código de presentación como HTML, CSS

 JavaScript.

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

2/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Unconrolador interpreta laentradadelusuario yredirigealmodeloy/

vista.

Kohanaeraoriginalmenteuna escisióndeCodeIgniter(CI),queesunproduct

open source de la empresa EllisLab.Haymuchas similitudes entre CI yKohana

pero todo el código es nuevo o ha sido completamente reescrito. Tal y com

puedesleerenlapáginaoficialdeKohana ,lascaracterísticasprincipalesson:

Altamenteseguro

Extremadamenteligero

Brevecurvadeaprendizaje

UtilizaelpatrónMVC

100%compatibleconlacodificaciónUTF-8

Arquitecturadébilmenteacoplada

Extremadamentefácildeextender

Paso2:DescargandoKohana

Empecemos.VisitalapáginaoficialdeKohanayhazclicksobrelacajaverdedel

esquinaderechaparadescargarlaúltimaversión.Todaslasbibliotecas,asistente

y vistasdeKohanaestán incluidosenel paquetede descargapordefecto,per

puedesseleccionarmódulosextra,herramientasdeterceros,yloslenguajesqu

desees.Para elpropósitodeeste tutorial,elpaquetepordefectoserásuficiente

Hazclicken"DownloadKohana!"parainiciarladescarga.

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

3/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Paso3:InstalandoKohanaUnavezquesehaterminadoladescarga:

1. Descomprimirelzip

2. Renombrarlacarpeta "Kohana_vx.x.x"(x.x.x=númerodeversión)a"kohana"

súbelaalacarpetaraízdetuservidorweb.

3. Editaelficherodeconfiguraciónglobalapplicationconfigconfig.phpdeest

forma:

$config['site_domain'] = 'localhost/kohana';

4. Si estás usando un sistema unix (linux, MacOSX), las subcarpetas de l

instalación podrían haber perdido suspermisos durante la descompresiódelzip.Hazunchmoda755detodasellasejecutandofind . -type d

exec chmod 755 { \;desdelacarpetaraízdelainstalacióndeKohana.

5. Asegúratedequeapplicationlogsyapplicationcachenoseandesólolectura

Hazchmoda666sobreellas.

6. Ahora,apuntaelnavegadorahttp://localhost/kohana/.Automáticamente,e

 framework llamaráainstall.php y comprobará losrequerimientoscon e

servidor.

Kohana se ejecutará en prácticamente cualquier entorno que cumpla l

configuraciónmínima:

ServidorconsoportedeUnicode

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

4/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

PHPconunaversiónigualoposteriorala5.2.3

UnservidorHTTP.SugieroXAMPP ,queesunaherramientasencillatodo

en-unoparainstalarMySQL,PHPyPerl.

Unabasededatos(MsSQL,MySQL,MySQLi,PostgreSQL,PDOSqlite).

Tambiénhayextensionesnecesarias:

PCRE

iconv

mcrypt

SPL

Silainstalaciónsecompletaconéxito,serásdirigidoaestapáginadeprueba:

Sialgunadelaspruebasfalla,deberáscorregirlaantesdecontinuar.

Sitodaslascomprobacionestienenéxito,dirígetealacarpetadeKohanayelimin

orenombraelarchivoinall.php.Recargalapáginaenelnavegadoryverá

unapáginadebienvenidacomoesta:

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

5/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Paso4:ConfigurandoKohanaKohana está preparado para funcionar. No se necesita realizar ningun

configuración.Este framework esgenial, ¿no teparece?Vamosaver unpocodcódigo,sígueme.

Paso5:ElprimerproyectoconKohanaLos tutoriales de programación tradicionales empiezan con el ejemplo "hell

world".Peroyocreoqueunaaplicaciónsimplepuededarunaideaclaradecóm

funcionael framework .VamosaconstruirungestordecoleccionesdeCDs--sólcomo divertida demostración. Antes de empezar a escribir códigoes necesari

unaintroducciónbrevealadistribucióndecarpetasdeKohana.

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

6/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Nuestraaplicaciónseubicaráenlacarpetaapplication.Enestacarpetahayvaria

subcarpetasperosólonecesitamoslosiguienteparanuestroproyecto:

config guarda los archivos de configuración codificados como simple

arrasestáticos.

controllersguardanuestraclasedecontroladorespersonalizada

modelsguardanuestraclasedemodelospersonalizada

views guarda nuestro archivos personalizados escritos en HTML (

cualquierlenguajedemarkuposcriptsnecesariosparamostrarlosdatos

loscontrolesdeinterfícieparaelusuario)

Elresto desubcarpetas nose necesitanpara estetutorial,porlo quete invito

aprendermásposteriormentesobreellosenlapáginadeKohana.

Lacarpetasstemguarda elnúcleodeKohanayherramientas comobiblioteca

(librar), asistentes (helper) y archivos de configuración predefinidos. En est

proyecto vamos a usar algunas bibliotecas y algunos asistentes - buena

herramientasparaacelerartutrabajo.

La carpeta assets no pertenece a Kohana por defecto. Yo la he creado par

guardar archivos estáticos como CSS, JS o imágenes. Despuésmostraré com

incluirlosenelproyecto.

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

7/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

La carpeta modles es el lugar donde guardar las colecciones reusables darchivos relacionados que unidos aportan una funcionalidad particular a unaplicación. El módulo de autenticación de usuarios, ofrecido por el equipKohana,esunejemplodemódulo.

Éstaesunamuy breve introducciónalsistemade archivos deKohana, peroesuficienteparalospropósitosdeestetutorial.Noquieroaburrirteconmásteoría.

Paso6:LabasededatosdelproyectoHe seleccionadoMySQL para mi proyecto, pero recuerda que Kohana soportigualmenteMsSQL,MySQLi,PostgreSQL,oPDOSqlite.Creaunabasededato

llamada"cd_collection"oeligeelnombrequeprefieras,yejecutalasiguienteSQmediante phpMyAdmin o cualquier herramienta para administrar la base ddatos.

123456789101112131415

16171819202122232425

2627282930

CREATE TABLE `albums` (  `id` int(11) NOT NULL auto_increment,  `name`  archar(50) collate utf8_bin NOT NULL,  `author`  archar(50) collate utf8_bin NOT NULL,  `genre_id` int(11) NOT NULL,  PRIMARY KEY  (`id`),  KEY `genre_id` (`genre_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

INSERT INTO `albums` (`id`, `name`, `author`, `genre_i(2, 'Lines, Vines And Trying Times', 'Jonas Brothers',(3, 'The E.N.D.', 'The Black Eyed Peas', 16),(4, 'Relapse', 'Eminem', 18),(5, 'Monuments And Melodies', 'Incubus', 1),(6, 'Thriller', 'Michael Jackson', 16),

(7, 'Back in Black', 'AC/DC', 4),(8, 'The Dark Side of the Moon', 'Pink Floyd', 4),(9, 'Bat out of Hell', 'Meat Loaf', 4),(10, 'Backstreet Boys', 'Millennium', 16),(11, 'Rumours', 'Fleetwood Mac', 4),(12, 'Come on Over', 'Shania Twain', 16),(13, 'Led Zeppelin IV', 'Led Zeppelin', 4),(14, 'Jagged Little Pill', 'Alanis Morissette', 4),(15, 'Sgt. Pepper''s Lonely Hearts Club Band', 'The Be(16, 'Falling into You', 'Cvline Dion', 16),

(17, 'Music Box', 'Mariah Carey', 16),(18, 'Born in the U.S.A.', 'Bruce Springsteen', 4); CREATE TABLE `genres` (  `id` int(11) NOT NULL auto_increment,

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

8/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Comopuedesver,elQL crea dostablas,álbumes y géneros, y los puebla co

algunosdatos.LaúltimasentenciaQLagregaunarestricciónparalaclaveajen

"gene_id".

Laestructuradelabasededatosesmuysimpleynonecesitamayorexplicación:

31323334353637

38394041424344454647

4849505152535455565758596061

  `name`  archar(50) collate utf8_bin NOT NULL,  PRIMARY KEY  (`id`),  UNIQUE KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

INSERT INTO `genres` (`id`, `name`)  VALUES

(1, 'Alternative Rock'),

(2, 'Blues'),(3, 'Classical'),(4, 'Rock'),(5, 'Countr'),(6, 'Dance'),(7, 'Folk'),(8, 'Metal'),(9, 'Hawaiian'),(10, 'Imports'),(11, 'Indie Music'),

(12, 'Ja'),(13, 'Latin'),(14, 'New Age'),(15, 'Opera'),(16, 'Pop'),(17, 'Soul'),(18, 'Rap'),(20, 'Soundtracks'),(21, 'World Music');  ALTER  TABLE `albums`   ADD CONSTRAINT `genre_inter_relational_constraint` F

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

9/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Ahora,debesdecirleaKohanadóndeestátubasededatosycómoaccederaella

Edita el archivo de configuración global systemconfigdatabase.php de est

forma:

12345678910111213141516171819

202122

$config['default'] = arra

(  'benchmark'  => TRUE,  'persistent'  => FALSE,  'connection'  => arra

  (  'tpe'  => 'msql',

'user'  => 'root','pass'  => 'root','host'  => 'localhost','port'  => FALSE,'socket'  => FALSE,'database' => 'cd_collection'

  ),  'character_set' => 'utf8',  'table_prefi'  => '',  'object'  => TRUE,  'cache'  => FALSE,  'escape'  => TRUE

);

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

10/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

EstecódigolediceaKohanaqueseconecteaunabasededatosMySQLllamad

"cd_collection" en localhost con el nombre de usuario "root" y la clav

"root".Debes cambiarlasdeacuerdocon tuconfiguracióndeservidordebas

dedatos.

Paso7:CreandoelcontroladorCreémosnuestroprimercontrolador.Recuerdaestasconvenciones:

el nombre de archivo del controlador debe estar en minúsculas, po

ejemploalbum.php

laclasecontroladordebecoincidirconsunombredearchivoperoiniciad

con mayúscula y debe añadir _Controller , por ejemplAlbum_Controller

DebetenerlaclaseControllercomopadre

Igualmente,recuerdacómoKohanaestructurasusURLsycómopuedesllamar

un método de controlador; por ejempl

http://hostname/carpeta_de_kohana/inde.php/controller/functi

on

Echaunvistazoaestesimplecontrolador.

PHP5OOP(programaciónorientadaaobjetos)esunprerrequisito.Paraaprende

mássobreello,puedesleeraquí.

1234567

8910111213141516

<?php defined('SYSPATH') OR die('No direct access allo class Album_Controller etends Controller{

 public function __construct(){

parent::__construct();

   

 public function index()  {  echo "My first controller";

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

11/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

La función constructor, llamada __construct , inicializa la clase y llama a

constructorpadre.Lafuncióninde es la funciónpor defecto, por lo que ser

usada si llamamos al controlador sin especificar una función (por ejemplo

http://localhost/index.php/kohana/album. Traselnombredelcontroladorno ha

ningunafunción,lafuncióndeíndiceserállamadapordefecto).

Dadas estas reglas básicas, enfoquémonos en la aplicación. El controlador d

album implementa todas las acciones para la gestiónde colección de álbumes

Este controlador nos permite crear un nuevo álbum, mostrar los álbume

guardadosenlabasededatos,actualizarunálbumoborrarunálbum.

Crea un archivo llamado album.php en applicationcontrollers  y pega lo

siguiente:

123456789

10111213141516171819202122232425262728

2930313233

<?php defined('SYSPATH') OR die('No direct access allo cla Album_Controller eend Controller{   piae $album_model;

 piae $genre_model; 

 piae $list_view;   piae $create_view;

   piae $update_view; 

 pblic fncion __construct(){

parent::__construct();  $this->album_model = ne Album_Model;  $this->genre_model = ne Genre_Model;  $this->list_view = ne View('list');  $this->update_view = ne View('update');  $this->create_view = ne View('create');   

 pblic fncion index()  {  $this->show_albums_list();   

 piae fncion show_albums_list()  {

  $albums_list = $this->album_model->get_list();$this->list_view->set('albums_list',$albums_li  $this->list_view->render(TRUE);

 

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

12/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

34353637383940

41424344454647484950

51525354555657585960616263646566676869

70717273747576777879

8081828384

   public function show_create_editor()  {  $this->create_view->set('genres_list',$this->  $this->create_view->render(TRUE);   

 public function show_update_editor($id)

  {  $album_data = $this->album_model->read($id);  $this->update_view->set('album_id',$album_data[  $this->update_view->set('name',$album_data[0]-  $this->update_view->set('author',$album_data[0]  $this->update_view->set('genre_id',$album_data[  $this->update_view->set('genres_list',$this->g  $this->update_view->render(TRUE);   

 public function create()  {

$album_data=arra(  'name'  => $this->input->post('name'),  'author'  => $this->input->post('author'),  'genre_id'  => $this->input->post('genre_id')  );  $this->album_model->create($album_data);  url::redirect('album');   

 public function update()  {

$album_data = arra(  'name'  => $this->input->post('name')  'author'  => $this->input->post('autho  'genre_id'  => $this->input->post('genre_i  );  $this->album_model->update($this->input->post('

  url::redirect('album');   

 public function delete($id)  {  $this->album_model->delete($id);  url::redirect('album');   

 private function get_genres_list()

  {  $db_genres_list  = $this->genre_model->get_lis

$genres_list  = arra(); 

if(sizeof($db_genres_list) >= 1)

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

13/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Déjameexplicarloquehaceestecódigo.

Sedeclarancincovariablesmiembroalinicio:

Estos miembros son privados porque quiero limitar su visibilidad sólo a est

clase.

Enelmétodoconclosobjetosdemodeloyvistasoncreadosusandolo

cincomiembros:

Paracrearunobjetomodelousaestasintaxis:

Paracrearunobjetovista,usaestasintaxis:

85868788899091

92939495

  {  foeach($db_genres_list a $item)  {  $genres_list[$item->id] = $item->name;      en $genres_list;

 

12345678

   piae $album_model; piae $genre_model;

  piae $list_view;

   piae $create_view;   piae $update_view;

1

234567

  $this->album_model = ne Album_Model;

  $this->genre_model = ne Genre_Model;  $this->list_view = ne View('list');  $this->update_view = ne View('update');  $this->create_view = ne View('create');

1 $obj_name = ne Name_Model; ?

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

14/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Ahorahaydosobjetosparaaccederalmodelodeálbumygénero,ytresobjeto

paraaccederalasvistasnecesariasparagenerarlapresentación.

El método inde llama al método sho_albums_list que lista todos loálbumesguardadosenlabasededatos.

En este método puedes ver cómo el modelo y la vista objeto son usada par

accederamétodosrelativos."ge_li"esunmétododelmodelo(loveremoluego) que devuelve todos los álbumes guardados en la base de datos. E

resultadoseguardaenelarra"$albm_li".Parapasarelarraderesultado

del controlador a la vista, el método "e" del objeto vista es llamado. Est

método requiere dos parámetros: una nueva variable vacía (albm_li

contienedatosdeunavariableexistente($albm_li).Ahoralanuevavariabl

vacía "albm_li" contine el arra $albm_li (veremos después com

mostrarsucontenidoenlavista).Elmétodo"ende" ,conelparámetroTRUE

esnecesarioparagenerardatosparaelnavegador.

Elmétodosho_create_editor muestralainterfíciedeusuarioparainserta

unnuevoálbum.

Lalistadegénerosespasadaalavista.

El método sho_update_editor muestra la interfície de usuario par

actualizarunálbumexistente.

1 $obj_name = ne Vie('ie_filename_iho_eenion')

123

$albm_li = $hi->albm_model->ge_li();$hi->li_ie->e('albm_li',$albm_li);$hi->li_ie->ende(TRUE);

12

  1. $hi->ceae_ie->e('gene_li',$hi->ge_$hi->ceae_ie->ende(TRUE);

1234567

$albm_daa = $hi->albm_model->ead($id);$hi->pdae_ie->e('albm_id',$albm_daa[0]->id);$hi->pdae_ie->e('name',$albm_daa[0]->name);$hi->pdae_ie->e('aho',$albm_daa[0]->aho)$hi->pdae_ie->e('gene_id',$albm_daa[0]->gen$hi->pdae_ie->e('gene_li',$hi->ge_gene$hi->pdae_ie->ende(TRUE);

?

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

15/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

"read" es un método del modelo (lo veremos después) que devuelve dato

($albm_daa) del álbum con un identificador igual a $id. Entonces, cad

elementodelálbumdedatosdevueltoespasadoalavista.

Elmétodoceaerecibedatosparaunnuevoálbumapartirdelavistayguard

losdatosrecibidosenlabasededatos.

$albm_daaesunarraquecontienelosdatosPOSTdelavista.Paraguardare

álbum, elarra se pasaal métododelmodelocreae. Laúltima líneaes un

llamada a unmétodo asistente. Los asistentes (helpers) son funciones que t

asisteneneldesarrollo.Las clases asistentesonautomáticamente cargadaspo

Kohana. Losasistentes sedeclaran comométodosestáticos deunaclase,por l

quenohaynecesidaddeinstanciarlaclase.Enestecaso,elmétodo "redirecdelasistente"rl" es llamadoy ledice aKohanaque redirijael navegador a

controladordeálbum.Estoevitaunanuevainserción(porejemplo,alpulsarF5).

Los métodos pdae (actualizar) y delee (borrar) funcionan de la mism

formaqueceae.

El último métodoge_gene_li obtiene la lista de géneros del model

($db_gene_li) y construye un nuevoarra ($gene_li) para econtroldeselección(select)enlasvistas.

123456

7

$album_data=arra('name'  => $this->input->post('name'),'author'  => $this->input->post('author'),'genre_id'  => $this->input->post('genre_id'));$this->album_model->create($album_data);

url::redirect('album');

123456

7891011

$db_genres_list  = $this->genre_model->get_list();$genres_list  = arra();

if(sizeof($db_genres_list) >= 1){

foreach($db_genres_list as $item)

{ $genres_list[$item->id] = $item->name;

return $genres_list;

?

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

16/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Paso8:CreandoelmodeloparaelproyectoCreemos los modelos para nuestra aplicación web. Conviene recordar la

convenciones indicadas anteriormente a la hora de crear las clases.continuación estáel códigopara elmodelodel álbum.Creaunarchivo llamad

albm.phpenapplicationmodels ypegaenélelsiguientecódigo:

12345

6789101112131415

16171819202122232425

2627282930313233343536373839

<?php defined('SYSPATH') OR die('No direct access allo class Album_Model etends Model{   private $album_table;

  private

 $genre_table;

 public function __construct()  {  parent::__construct();  $this->album_table = 'albums';  $this->genre_table = 'genres';   

 public function read($id)

  {  $this->db->where('id', $id);  $query = $this->db->get($this->album_table);

return $query->result_array();   

 public function delete($id)  {  $this->db->delete($this->album_table, arra('i 

  public function update($id,$data)

  {  $this->db->update($this->album_table, $data, a

   

 public function create($data)  {  $this->db->insert($this->album_table, $data)   

 public function get_list()  {  $this->db->select('albums.id as id,albums.na

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

17/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Todos losmétodosde losmodelosusanla sintaxisdelconstructorde consulta

(Querybuilder).EstaherramientadeKohanaaceleraeltiempodedesarrolloco

 basesdedatosysimplificalacreacióndeconsultas.

Dosvariablesmiembrosondeclaradasaliniciodelaclase:

Estosmiembrossonprivadosporquequierolimitarlavisibilidadsóloaestaclase

Sonloscontenedoresdelosnombresdelastablasdelabasededatos.

Laprimeralíneaenelmétododelconstructorcargalabibliotecadebasededato

de Kohana en$hi->db. En las dos siguientes líneas, se inicializan las do

variablesmiembro.

Laconsultaenelmétodo ead recupera los registrosdeálbum que tengan u

ciertoidentificador("$id").

Laconsultaenelmétododeleeeliminalafiladelatabladeálbumesqueteng

unciertoidentificador("$id").

40414243444546

47

  $this->db->from($this->album_table);$this->db->join($this->genre_table,'genres.i

  $query = $this->db->get();  return $query->result_array(); 

12

 private $album_table; private $genre_table;

123

parent::__construct();$this->album_table = 'albums';$this->genre_table = 'genres';

1234

$this->db->where('id', $id);$query = $this->db->get($this->album_table);

return $query->result_array();

1 $this->db->delete($this->album_table, arra('id' => $i

?

?

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

18/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

La consulta en el métodopdae actualiza la fila de la tabla de álbumes qu

tengaunciertoidentificador("$id")conlosnuevosvaloresdelarra"$daa".

Elarra"$daa"debecontenernombresderegistroscomoclavesdelarra ,ysuvalorescomovaloresdelarra.Elarradebetenerestaforma:

Laconsultaenelmétodoge_lirecuperatodaslasfilasdeálbumes.

Ahora el modelo para los géneros. Crea un archivo llamado gene.php e

applicationmodels ypegaelsiguientecódigoenél:

1 $this->db->update($this->album_table, $data, arra('id'

12345

$data = arra('name'  => 'album_name','author'  => 'author_name','genre_id'  => 'genre_id' );

12345

$this->db->select('albums.id as id,albums.name as name,$this->db->from($this->album_table);$this->db->join($this->genre_table,'genres.id','albums.$query = $this->db->get();return $query->result_array();

1234

567891011121314

1516171819

<?php defined('SYSPATH') OR die('No direct access allo class Genre_Model etends Model{

  private

 $genre_table; function __construct()

  {  parent::__construct();  $this->genre_table = 'genres';   

function get_list()  {

  $query = $this->db->get($this->genre_table);  return  $query->result_array();

?

?

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

19/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Estemodeloesmuysimple,porloquenomalgasterétiempocomentándolo.Lo

modelos y el controlador están preparados para funcionar. Ahora trabajemo

sobrelasvistas.

Paso9:CreandolavistadelproyectoLasvistassonarchivosquecontienenlacapadepresentacióndelaaplicación.S

propósitoesmantenerestainformaciónseparadadelalógicadelaaplicaciónpar

facilitar la reusabilidad y mantener el código limpio. Para este proyecto s

necesitantresvistas:unapara listar lacoleccióndeálbumes,otrapara crearu

nuevoálbum,yotraparaeditarunálbumexistente.

Crea un archivo llamado li.php en applicationviews  y pega el siguient

códigoenél:

12345

6789101112131415

16171819202122232425

2627282930

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//E<html><head><?php  echo html::stlesheet(arra

  (  'assets/css/stle'  ),  arra

  (  'screen'  ), FALSE);?>  <title>CD COLLECTION</title>  </head>

  <bod>  <?php

echo html::image('assets/images/add.pn  echo html::anchor('album/show_create_e  ?>  <table class="list" cellspacing="0">  <tr>  <td colspan="5" class="list_title">CD Coll  </tr>

<tr>

  <td class="headers">Album name</td>  <td class="headers">Author</td>  <td colspan='3' class="headers">Genre</td> 

</tr>

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

20/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Estavistamuestraunapágina hmlquecontieneunalistadetodoslosálbumes

Estalistahasidocreadausandounbucle foreachqueimprimelainformació

enunatablahml.Para cadafiladeálbum,haydos imágenes:una"cruz roja"

una"librodebolsillo".Enlazanrespectivamentealmétodo deleeyalmétod

pdaedelcontrolador.Ambospasanelidentificadordelálbumalcontrolado

usandounapeticiónGET.Sobrelalistahayunbotónparacrearunnuevoálbu

EnestecódigotambiénseusaunasistentehmlofrecidoporKohanaqueacelerlasoperacionesparaescribirpáginashml.

Creémosahoraunarchivollamadocreae.phpenapplicationviews .

31323334353637

383940414243444546

  <?php  foreach($albums_list as $item)  {  echo "<tr>";  echo "<td class='item'>".$item->name."  echo "<td class='item'>".$item->author.  echo "<td class='item'>".$item->genre."

  echo "<td class='item'>".html::anchor('  echo "<td class='item'>".html::anchor('  echo "</tr>";    ?>  </table>  </body>  </html>

1234

56789101112131415161718

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//E<html><head><?php

  echo html::stylesheet(arra  (  'assets/css/style'  ),  arra

  (  'screen'  ), FALSE);?><title>CD COLLECTION</title></head><body><?php echo form::open('album/create'); ?><table class='editor'>

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

21/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

La última es la vista de actualización. Crea un archivo pdae.php e

applicationviews .

19202122232425

26272829303132333435

3637383940414243444546

<tr>  <td colspan='2' class='editor_title'>Create new al</tr><?php  echo "<tr>";  echo "<td>".form::label('name', 'Name: ')."</td>";  echo "<td>".form::input('name', '')."</td>";

  echo "</tr>"; echo "<tr>";

  echo "<td>".form::label('author', 'Author: ')."</t  echo "<td>".form::input('author', '')."</td>";

echo "<tr/>"; 

echo "<tr>";  echo "<td>".form::label('genre', 'Genre: ')."</td>"  echo "<td>".form::dropdown('genre_id',$genres_list)

  echo "<tr/>"; 

echo "<tr>";  echo "<td colspan='2' align='left'>".form::submit('  echo "</tr>";?></table><?php echo form::close(); ?></bod></html>

12

3456789101112

1314151617

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//E<html>

<head><?php  echo html::stlesheet(arra  (  'assets/css/stle'  ),  arra

  (  'screen'  ), FALSE);

?><title>CD COLLECTION</title></head><bod><?php echo form::open('album/update'); ?>

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

22/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Elprimeroesuneditorsimplequepermitealusuarioinsertarinformaciónsobrunnuevoálbum.Loscamposcomoautorynombreseráninsertadosusandounentradahmlyelgénerousandouncombo.Unavezqueelusuariohaceclickene botón ceae , toda la información se pasa como una petición POST al métodcreae/pdae del controlador de álbum.Cuando el controlador recibe estavariables poeada llamaal modelo que inserta un nuevoálbum en la base ddatos.Losformulariosdeambasvistashacenusodelasistentedeformularios.

Paradarunpocodeestiloanuestraaplicación,crealacarpeta aeenlacarpetraízdeKohanaalmismoniveldelacarpetadeaplicaciones.Ábreloycreadonuevascarpetas:ceimage.

18192021222324

25262728293031323334

35363738394041424344454647484950

<table cla='editor'><tr>  <td colspan='2' cla='editor_title'>Update album</</tr><?php  echo "<tr>";  echo "<td>".form::label('name', 'Name: ')."</td>";

  echo "<td>".form::input('name', $name)."</td>";  echo "</tr>"; 

echo "<tr>";  echo "<td>".form::label('author', 'Author: ')."</t  echo "<td>".form::input('author', $author)."</td>";

echo "<tr/>"; 

echo "<tr>";  echo "<td>".form::label('genre', 'Genre: ')."</td>"

  echo "<td>".form::dropdown('genre_id',$genres_list,echo "<tr/>";

 echo "<tr>";

  echo "<td colspan='2' align='left'>".form::submit('  echo "</tr>"; ?></table><?php

echo form::hidden('album_id',$album_id);  echo form::close();?></bod></html>

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

23/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Enlacarpetaccreaunnuevoarchivollamadostle.cssypegalosiguient

enél:

1234

567891011121314151617181920212223

24252627282930313233

3435363738394041424344454647

a {  fon-famil: Verdana, Geneva, Arial, Helvetica, sa  fon-eigh: normal;  fon-ie: 12px;

  colo: #00F;   eical-align:text-top; img {   bode: 0; label {  fon-famil: Verdana, Geneva, Arial, Helvetica, sa  fon-eigh: normal;  fon-ie: 12px; input {   bode: 1px solid #000; select {

  idh:185px; table.editor{  e-align: center;  fon-famil: Verdana, Geneva, Arial, Helvetica, sa  fon-eigh: normal;  fon-ie: 11px;  colo: #fff;

  idh: 280px;   backgond-colo: #666;   bode: 0px;   bode-collape: collapse;   bode-pacing: 0px; table.editor td.editor_title{   backgond-colo: #666;  colo: #fff;   padding: 4px;  e-align: left;  fon-eigh: bold;

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

24/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

48495051525354

55565758596061626364

65666768697071727374757677787980818283

84858687888990919293

949596

  font-sie: 16px;

table.editor td{   padding: 4px;

table.list{  tet-align: center;  font-famil: Verdana, Geneva, Arial, Helvetica, sa  font-eight: normal;  font-sie: 11px;  color: #fff;  idth: 280px;   background-color: #666;

   border: 0px;   border-collapse: collapse;   border-spacing: 0px; table.list td.item{   background-color: #CCC;  color: #000;   padding: 4px;  tet-align: left;   border: 1px #fff solid; table.list td.list_title,table.list td.headers{   background-color: #666;  color: #fff;   padding: 4px;

  tet-align: left;   border-bottom : 2px #fff solid;  font-eight: bold;

table.list td.list_title{  font-sie: 16px;

table.list td.headers{  font-sie: 12px;

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

25/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Ahoracopialassiguientesimágenesenlacarpetaimage:

Eso es todo. Apunta el navegador a http://localhost/kohana/index.php/album

deberíasveralgoparecidoaesto:

Siintentascrearunnuevoálbumoeditarunoexistente,deberíasveralgosimila

aesto:

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

26/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Paso10:PensamientosfinalesDesdeluego,algunasmejorassonnecesariasparaestaaplicación,peroconmupococódigohas creadounapequeñaaplicaciónweb.Ahora, sabescómousare

patrónMVCconKohana,ycómousarlasbibliotecasyasistentesdelabased

datos.Paraaprendermás,leela documentaciónoficial.

Graciasa Kohana,elmantenimientodecódigo seconvierteen unatarea fácil,

añadir nuevas características es pan comido. Espero que hayas disfrutado de

tutorial.

k@beza dijo...

Muy bueno el articulo y muy buen trabajo de traduccionSaludos

15/12/09 20:03

Annimo dijo...

Si, es mejor que CI.

04/01/10 16:32

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

27/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

caloweb dijo...

Excelente

12/01/10 20:15

Anónimo dijo...

muy til, gracias

02/03/10 12:14

Anónimo dijo...

Estupendo, muchas gracias

28/07/10 18:36

Tomas Barrios H. dijo...

Cuales son los beneficios en comparacion a CodeIgniter?

24/08/10 23:43

Jose dijo...

Un guia para aprendizes excelente aunque yo como el primero recomendaria que la actualizasespara la version actual.

Un saludo, :D

15/02/11 22:57

Anónimo dijo...

no funciona el ejemplo con la ltima versión de kohana....

02/05/11 00:54

KIDO dijo...

Me marca error en:

34 $this->db->insert($this->album_table, $data);35 }

3637 public function get_list()38 {39 $this->db->select('albums.id as id,albums.name as name,albums.author as author, genres.nameas genre');40 $this->db->from($this->album_table);41 $this->db->join($this->genre_table,'genres.id','albums.genre_id');42 $query = $this->db->get();43 return $query->result_array();44 }

LA LINEA 39

ES BUEN PROYECTO PARA INICIAR EN KOHANA...GRACIAS...

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

28/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

Entrada más reciente Entrada antigu

PODRIAS AYUDARME EN EL ERROR???

02/10/11 03:46

Publicar un comentario en la entrada

Inrodce comenario...

Página principal

Suscribirse a: Enviar comentarios (Atom)

ltimos linkenindiza.com

Recibir actualizaciones por Email  Contactar.

 

Archivo del blogenero 2012 (8)

diciembre 2011 (10)

noviembre 2011 (13)

octubre 2011 (9)

febrero 2011 (2)

enero 2010 (1)

diciembre 2009 (2)

5/13/2018 digitta_ Empezando con Kohana, ¿mejor que CodeIgniter_ - slidepdf.com

http://slidepdf.com/reader/full/digitta-empezando-con-kohana-mejor-que-codeigniter

19/01/12 digitta: Empezando con Kohana, mejor que CodeIgniter?

29/29digitta.com/2009/12/empezando-con-kohana-mejor-que.html

noviembre 2009 (6)

octubre 2009 (1)

septiembre 2009 (1)

agosto 2009 (4)

julio 2009 (3)

junio 2009 (4)

mao 2009 (9)

abril 2009 (17)

maro 2009 (10)

febrero 2009 (12)

enero 2009 (20)

diciembre 2008 (13)

noviembre 2008 (12)

octubre 2008 (24)

septiembre 2008 (11)

agosto 2008 (12)

julio 2008 (22)

junio 2008 (31)

mao 2008 (50)

abril 2008 (40)

maro 2008 (194)