Contenido

Módulo Kohana

Por fin he creado mi primer módulo para Kohana. De momento es muy cutre, pero es una prueba de conceptos venida a más. Probablemente tenga que reimplementarlo entero.

Podéis obtener el código para probarlo, aunque puede cambiar bastante rápido y ser incompatible hacia atrás.

El módulo permite generar automáticamente vistas para nuestro modelo y controlador.

PHP

Para usarlo, los pasos son los siguientes:

  1. Crear una carpeta “modules/defaultsite” y descargar ahí el módulo.

  2. En el bootstrap.php, en la clave “kohana::modules”, añadir la línea: 'defaultsite' => MODPATH.'defaultsite'

  3. Ahora es cuando empieza lo bueno: vamos a construir un site:

    1. Crear la BBDD.
    2. Crear el modelo. Como siempre en kohana.
    3. Crear el controlador: todo igual que siempre con kohana, pero heredando de Controller_Default. Basta con escribir el constructor.

Ya está. Accede a tu site.

Ejemplo

BBDD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE  TABLE IF NOT EXISTS 'kohana'.'example1' (
  'id' INT(11) NOT NULL AUTO_INCREMENT,
  'text' VARCHAR(45) NULL DEFAULT NULL ,
  'number' INT(11) NULL DEFAULT NULL ,
  'file' BLOB NULL DEFAULT NULL ,
  'date' DATE NULL DEFAULT NULL ,
  'boolean' TINYINT(1) NULL DEFAULT NULL ,
  'example2_id' INT(11) NULL ,
  PRIMARY KEY ('id') ,
  INDEX 'fk_example1_example21' ('example2_id' ASC) ,
  CONSTRAINT 'fk_example1_example21'
    FOREIGN KEY ('example2_id' )
    REFERENCES 'kohana'.'example2' ('id' )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_swedish_ci;

CREATE  TABLE IF NOT EXISTS 'kohana'.'example2' (
  'id' INT(11) NOT NULL AUTO_INCREMENT,
  'title' VARCHAR(45) NULL DEFAULT NULL ,
  PRIMARY KEY ('id') )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

model/example2.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php defined('SYSPATH') OR die('No Direct Script Access');

class Model_Example2 extends ORM
{
 protected $_table_name = 'example2';

 public function __toString ()
 {
  return $this->title;
 }
}

controller/example2.php

1
2
3
4
5
6
7
8
9
<?php defined('SYSPATH') OR die('No Direct Script Access');

class Controller_Example2 extends Controller_Default
{
 public function __construct(Kohana_Request $request)
 {
  parent::__construct($request, 'example2');
 }
}

Explicación

Llegado a este punto ya podemos administrar elementos de tipo 2.

En mi máquina, tengo que acceder a /index.php/example2 para poder administrarlo. Como veréis, las páginas son muy simples pero completamente funcionales.

Se crea automáticamente un índice y permite el borrado, actualización o creación de nuevos elementos.

Se pueden cambiar las columnas, pero no lo contaré aún porque eso está en una fase MUY beta.

Con el fin de ver el funcionamiento de la otra tabla, recomiendo introducir algunos valores.

model/example1.php

1
2
3
4
5
6
7
8
9
<?php defined('SYSPATH') OR die('No Direct Script Access');

class Model_Example1 extends ORM
{
 protected $_table_name = 'example1';

 protected $_belongs_to = array ('example1' =>
  array('model'=>'example2', 'foreign_key' => 'example2_id'));
}

controller/example1.php

1
2
3
4
5
6
7
8
9
<?php defined('SYSPATH') OR die('No Direct Script Access');

class Controller_Example1 extends Controller_Default
{
 public function __construct(Kohana_Request $request)
 {
  parent::__construct($request, 'example1');
 }
}

Explicación

Si añadimos objetos de tipo Example1, veremos que los tipos de botones son sensibles al tipo de datos seleccionado: los textos son textarea, las fechas usan jquery para mostrar un calendario, los BLOB muestran un campo de entrada de fichero (uf, muy beta aún) y las claves ajenas muestran un combobox con todos sus elementos.

Final

De momento está todo muy patas arriba, ya que hace 2 semanas que me puse con Kohana y que mis conocimientos de PHP dejan bastante que desear. Se acepta ayuda!!