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)