Added Kohana v3.0.8

This commit is contained in:
Deon George
2010-08-21 14:43:03 +10:00
parent 27aee719b0
commit 64bdbdc981
558 changed files with 58712 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
# Gestión de Errores/Excepciones
Kohana proporciona un gestor de errores y excepciones que transforma errores en excepciones usando la clase [ErrorException](http://php.net/errorexception) de PHP. Se muestran muchos detalles del error y del estado interno de la aplicación:
1. Clase de excepción
2. Nivel del error
3. Mensaje de error
4. Fuente del error, con la línea del error resaltada
5. Una [depuración hacia atrás](http://php.net/debug_backtrace) del flujo de ejecución
6. Archivos incluídos, extensiones cargadas y variables globales
## Ejemplo
Haz clic en cualquiera de los enlaces para mostrar la información adicional:
<div>{{userguide/examples/error}}</div>
## Desactivando la Gestión de Errores/Excepciones
Si no quieres usar la gestión de errores interna, la puedes desactivar cuando se llama a [Kohana::init]:
~~~
Kohana::init(array('errors' => FALSE));
~~~

View File

@@ -0,0 +1,24 @@
# Depuración
Kohana incluye varias herramientas útiles que te ayudarán en la depuración de tus aplicaciones.
La más básica de ellas es [Kohana::debug]. Este método simple mostrará cualquier número de variables, similar a [var_export] o [print_r], pero usando HTML para una mejor visualización.
~~~
// Mostrar el contenido de las variables $foo y $bar
echo Kohana::debug($foo, $bar);
~~~
Kohana también proporciona un método para mostrar el código fuente de una línea particular usando [Kohana::debug_source].
~~~
// Mostrar esta línea del código
echo Kohana::debug_source(__FILE__, __LINE__);
~~~
Si quieres mostrar información sobre los archivos de tu aplicación sin exponer el directorio de instalación, puedes usar [Kohana::debug_path]:
~~~
// Mostrar "APPPATH/cache" en vez de la ruta real
echo Kohana::debug_file(APPPATH.'cache');
~~~

View File

@@ -0,0 +1,22 @@
# Análisis de Rendimiento
Kohana proporciona una forma muy simple de mostrar estadísticas sobre tu aplicación:
1. Los métodos de [Kohana] más usados
2. Peticiones
3. Consultas a la Base de Datos ([Database])
4. Tiempo de ejecución media de tu aplicación
## Ejemplo
En cualquier momento puedes mostrar o recolectar las estadísticas actuales del analizador ([profiler]):
~~~
<div id="kohana-profiler">
<?php echo View::factory('profiler/stats') ?>
</div>
~~~
## Vista previa
{{profiler/stats}}

View File

@@ -0,0 +1 @@
Esta página lista las características de Kohana v3

View File

@@ -0,0 +1,23 @@
1. **[Cómo Empezar](start)**
- [Convenciones y Estilos](start.conventions)
- [Instalación](start.installation)
- [Configuración](start.configuration)
- [Modelo Vista Controlador](start.mvc)
- [Sistema de Archivos](start.filesystem)
- [Autocarga](start.autoloading)
- [Proceso de las Peticiones](start.flow)
2. **[Tutoriales](tutorials)**
- [Hola, Mundo](tutorials.helloworld)
- [Rutas, URLs, y Enlaces](tutorials.urls)
- [Bases de Datos](tutorials.databases)
3. **[Seguridad](security)**
- [XSS](security.xss)
- [Validación](security.validation)
- [Cookies](security.cookies)
- [Bases de Datos](security.database)
4. **[Depuración](debugging)**
- [Gestión de Errores](debugging.errors)
- [Análisis de Rendimiento](debugging.profiling)
5. **[Actualizando](upgrading)**
- [Desde 2.3](upgrading.23)
6. **[Explorar API](api)**

View File

@@ -0,0 +1,3 @@
# Seguridad en las Cookies
[!!] inacabado

View File

@@ -0,0 +1,3 @@
# Seguridad en las Bases de Datos
[!!] inacabado

View File

@@ -0,0 +1,3 @@
# Seguridad
[!!] inacabado

View File

@@ -0,0 +1,3 @@
# Validación
[!!] inacabado

View File

@@ -0,0 +1,15 @@
# Seguridad en Cross-Site Scripting (XSS)
El primer paso para prevenir los ataques de [XSS](http://es.wikipedia.org/wiki/Cross-site_scripting) es saber cuando necesitas protegerte a ti mismo. El XSS sólo puede llevarse a cabo cuando se muestra dentro de contenido HTML, muchas veces vía una entrada de formulario o cuando mostramos datos de resultados de la base de datos. Cualquier variable global que contenga información desde el cliente puede ser contaminada. Esto incluye los datos de las variables $_GET, $_POST, y $_COOKIE.
## Prevención
Hay unas pocas reglas simples para proteger el HTML tu aplicación del XSS. La primera es usar el método [Security::xss] para limpiar cualquier dato de entrada que venga de una variable global. Si no necesitas HTML en una variable, usa [strip_tags](http://php.net/strip_tags) para remover todas las etiquetas HTML innecesarias del contenido.
[!!] Si quieres permitir a los usuarios enviar HTML en tu aplicación, es altamente recomendable usar una herramienta de limpieza de HTML como [HTML Purifier](http://htmlpurifier.org/) o [HTML Tidy](http://php.net/tidy).
La segunda es que siempre debemos escapar los datos cuando se insertan en el HTML. La clase [HTML] proporciona generadores para muchas de las principales etiquetas, incluyendo scripts, hojas de estilo, enlaces, imágenes, y email (mailto). Cualquier contenido no verificado debería escaparse usando [HTML::chars].
## Referencias
* [OWASP XSS Cheat Sheet](http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet)

View File

@@ -0,0 +1,17 @@
# Autocarga
Kohana aprovecha la habilidad de PHP [autocarga](http://docs.php.net/manual/es/language.oop5.autoload.php). Esto elimina la necesidad de llamar a [include](http://php.net/include) o [require](http://php.net/require) antes de usar una clase.
Las clases son cargadas usando el método [Kohana::auto_load], el cual hace una simple conversión del nombre de la clase al nombre del archivo:
1. Las clases son colocadas en el directorio `classes/` del [sistema de archivos](start.filesystem)
2. Cualquier caracter de barra baja es convertido a barra invertida
2. El nombre de archivo es todo en minúsculas
Cuando llamamos a una clase que no ha sido cargada (por ejemplo: `Session_Cookie`), Kohana buscará en el sistema de archivos usando [Kohana::find_file] un archivo llamado `classes/session/cookie.php`.
## Autocargadores personalizados
[!!] El autocargador por defecto es activado en `application/bootstrap.php`.
Los cargadores de clases adicionales pueden ser añadidos usando [spl_autoload_register](http://php.net/spl_autoload_register).

View File

@@ -0,0 +1,94 @@
# Configuración General
[!!] por hacer, descripción de los beneficios de las propiedades estáticas para la configuración
## Configuración Principal
La primera tarea de configuración de cualquier nueva instalación de Kohana es cambiar la configuración de inicio [Kohana::init] en `application/bootstrap.php`. Los datos configurables son:
`boolean` errors
: ¿Usar el gestor de errores y excepciones interno? (Por defecto `TRUE`) Establecer a `FALSE` para desactivar el gestor de errores y excepciones de Kohana.
`boolean` profile
: ¿Hacer análisis de rendimiento interno? (Por defecto `TRUE`) Establecer a `FALSE` para desactivarlo. En sitios en producción debería estar desactivado para un mejor rendimiento.
`boolean` caching
: ¿Cachear la localización de los archivos entre peticiones? (Por defecto `FALSE`) Establecer a `TRUE` para cachear la
ruta absoluta de los archivos. Esto aumenta dramáticamente la velocidad de [Kohana::find_file] y puede muchas veces
tener un impacto dramático en el desempeño. Sólo activar en sitios en producción o para su prueba.
`string` charset
: Juego de caracteres usado para todas las entradas y salidas. (Por defecto `"utf-8"`) Debería ser un juego de caracteres que sea soportado por [htmlspecialchars](http://php.net/htmlspecialchars) e [iconv](http://php.net/iconv).
`string` base_url
: URL base de la aplicación. (Por defecto `"/"`) Puede ser una URL completa o parcial. Por ejemplo "http://example.com/kohana/" o sólo "/kohana/" funcionan ambas por igual.
`string` index_file
: El archivo PHP que inicia la aplicación. (Por defecto `"index.php"`) Establecer a `FALSE` cuando elimines el archivo index con la reescritura de la URL (mod_rewrite y similares).
`string` cache_dir
: Directorio de la Cache. (Por defecto `"application/cache"`) Debe apuntar a un directorio **escribible**.
## Configuración de las Cookies
Hay varias propiedades estáticas en la clase [Cookie] que deberían establecerse, especialmente en sitios en producción.
`string` salt
: Cadena que es usada para crear [cookies cifradas](security.cookies)
`integer` expiration
: Tiempo de expiración en segundos
`string` path
: Ruta URL para restringir dónde pueden ser accedidas las cookies
`string` domain
: Dominio URL para restringir dónde pueden ser accedidas las cookies
`boolean` secure
: Permitir que las cookies sólo sean accedidas por HTTPS
`boolean` httponly
: Permitir que las cookies sólo sean accedidas por HTTP (también desactiva el acceso por Javascript)
# Archivos de Configuración
La configuración se establece en archivos PHP planos, del estilo de:
~~~
<?php defined('SYSPATH') or die('No direct script access.');
return array(
'setting' => 'value',
'options' => array(
'foo' => 'bar',
),
);
~~~
Si el archivo de configuración anterior se llamaba `myconf.php`, puedes acceder a él usando:
~~~
$config = Kohana::config('myconf');
$options = $config['options'];
~~~
[Kohana::config] también proporciona una forma corta para acceder a valores individuales del array de configuración usando "rutas con puntos".
Obtener el array "options":
~~~
$options = Kohana::config('myconf.options');
~~~
Obtener el valor de "foo" del array "options":
~~~
$foo = Kohana::config('myconf.options.foo');
~~~
Los arrays de configuración también pueden ser accedidos como objetos, si prefieres ese método:
~~~
$options = Kohana::config('myconf')->options;
~~~

View File

@@ -0,0 +1,26 @@
# Convenciones
## Nombre de las clases y la localización del archivo
Los nombres de las clases en Kohana siguen una forma estricta para facilitar la [autocarga](start.autoloading).
Los nombres de las clases deben tener la primera letra mayúscula con barra baja para separar palabras. Las barras bajas son significativas ya que directamente reflejan la localización del archivo en el sistema de archivos.
Clase Archivo
Controller_Template classes/controller/template.php
Model_User classes/model/user.php
Model_Auth_User classes/model/auth/user.php
Auth classes/auth.php
Los nombres de las clases del estilo de PrimeraMayuscula no deberían ser usadas.
Todos los nombres de los archivos de las clases y los directorios van en minúscula.
Todas las clases deben ir en el directorio `classes`. Esto debe ser así en cualquier nivel del [sistema de archivos en cascada](start.filesystem).
Kohana 3 no diferencia entre *tipos* de clases de la misma forma en que Kohana 2.x y otros frameworks lo hacen. No hay diferencia entre una clase tipo 'helper' o una de tipo 'library' - en Kohana 3 cualquier clase puede implementar cualquier interface que necesite o ser estática totalmente (estilo helper), o instanciable, o una mezcla (por ejemplo singleton).
## Estilo de Código
Se recomienda seguir el estilo de código usado en Kohana. Usamos el [estilo BSD/Allman](http://en.wikipedia.org/wiki/Indent_style#BSD.2FAllman_style). ([Descripción más pormenorizada](http://dev.kohanaphp.com/wiki/kohana2/CodingStyle) del estilo de código preferido por Kohana)

View File

@@ -0,0 +1,13 @@
# Sistema de Archivos en Cascada
El sistema de archivos de Kohana se compone de una única estructura de directorios que es repetida a lo largo de todos los directorios, lo que llamamos la ruta de inclusión, que sigue el orden:
1. application
2. modules, según el orden en que sean añadidos
3. system
Los archivos que se encuentran en directorios superiores en la lista de las rutas de inclusión tienen preferencia sobre los archivos del mismo nombre pero que están más abajo, lo cual hace posible sobrecargar cualquier archivo colocando otro archivo con el mismo nombre en un directorio superior:
![Cascading Filesystem Infographic](img/cascading_filesystem.png)
Si tiene un archivo de Vista llamado layout.php en los directorios application/views y system/views, será devuelto el que se encuentra bajo application cuando se busque por layout.php ya que se encuentra más arriba en la lista de inclusión ordenada. Si elimina ese archivo de application/views, el que se encuentra en system/views será devuelto cuando lo busquemos.

View File

@@ -0,0 +1,21 @@
# Proceso de las Peticiones
Cada aplicación sigue el siguiente proceso:
1. La aplicación empieza desde el archivo `index.php`
2. Incluye `APPPATH/bootstrap.php`
3. bootstrap.php llama a [Kohana::modules] con la lista de módulos usados
1. Genera una matriz con las rutas para el sistema de archivos en cascada
2. Comprueba cada módulo para ver si tiene un init.php, y si lo tiene, lo carga
* Cada init.php puede definir una serie de rutas a usar, que son cargadas cuando el archivo init.php es incluido
4. [Request::instance] es llamada para procesar la petición
1. Comprueba cada ruta hasta que se encuentra una coincidencia
2. Carga el controlador y le pasa la petición
3. Llama al método [Controller::before]
4. Llama a la acción del controlador
5. Llama al método [Controller::after]
5. Muestra la respuesta a la petición ([Request])
La acción del controlador puede ser cambiada por el método [Controller::before] en base a los parámetros de la petición.
[!!] inacabado

View File

@@ -0,0 +1,19 @@
# Instalación
1. Descarga la última versión **estable** de la [web de Kohana](http://kohanaphp.com/)
2. Descomprime el archivo descargado para crear un directorio `kohana`
3. Sube el contenido de esta carpeta a tu servidor
4. Abre `application/bootstrap.php` y haz los cambios siguientes:
- Establece la [zona horaria](http://php.net/timezones) por defecto para tu aplicación
- Establece `base_url` en la llamada a [Kohana::init] para reflejar la localización de la carpeta de kohana en tu servidor
6. Comprueba que los directorios `application/cache` y `application/logs` tienen permisos de escritura para todos con `chmod application/{cache,logs} 0777`
7. Comprueba tu instalación abriendo la url que has establecido en `base_url` en tu navegador favorito
[!!] Dependiendo de tu plataforma, los subdirectorios de la instalación podrían haber perdido sus permisos debido a la descompresión zip. Para cambiarle los permisos a todos ejecutar `find . -type d -exec chmod 0755 {} \;` desde la raíz de la instalación de Kohana.
Deberías ver la página de instalación. Si reporta algún error, debes corregirlo antes de continuar.
![Install Page](img/install.png "Ejemplo de la página de instalación")
Una vez que la página de instalación reporta que tu entorno está correcto, debes renombrar o borrar el archivo `install.php` del directorio raíz. Entonces deberías ver la página de bienvenida de Kohana (el texto `hello, world!`).

View File

@@ -0,0 +1,11 @@
# ¿Qué es Kohana?
Kohana es un [framework web](http://es.wikipedia.org/wiki/Framework_para_aplicaciones_web) [MVC](http://es.wikipedia.org/wiki/Modelo_Vista_Controlador "Modelo Vista Controlador") de código abierto y [orientado a objetos](http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos) realizado para [PHP5](http://docs.php.net/manual/es/intro-whatis.php "Preprocesador de Hipertexto PHP") por un equipo de voluntarios, y destaca por ser rápido, seguro y ligero.
[!!] Kohana está licenciado bajo una [licencia BSD](http://kohanaphp.com/license), así que puede legalmente usarlo para cualquier tipo de proyecto de código abierto, comercial, o personal.
## ¿Qué hace potente a Kohana?
Cualquier cosa puede ser extendida usando el [sistema de archivos](start.filesystem) de diseño único, poco o nada hay que cambiar en la [configuración](start.configuration), la [gestión de errores](debugging.errors) ayuda a localizar los errores de código rápidamente, y la [depuración](debugging) y [profiling](debugging.profiling) informan sobre la aplicación en sí.
Para que sus aplicaciones sean más seguras, se incluyen herramientas para [eliminar el XSS](security.xss), [validar de los datos de entrada](security.validation), [cookies](security.cookies), [formularios](security.forms) y [HTML](security.html). La capa de la [base de datos](security.database) proporciona protección de [inyección de código SQL](http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL). Por supuesto, todo el código oficial ha sido cuidadosamente escrito y revisado pensando en la seguridad.

View File

@@ -0,0 +1,5 @@
# Modelo Vista Controlador
Modelo Vista Controlador (o MVC) es un patrón de diseño popular que separa el origen de tus datos (Modelo) de la presentación/plantillas (Vista) y la lógica de la petición (Controlador).
Esto hace mucho más fácil desarrollar aplicaciones y el sistema es diseñado para maximizar la reutilización de código, lo que se traduce en que ¡no tendrás que escribir mucho!

View File

@@ -0,0 +1,3 @@
# Bases de Datos
[!!] inacabado

View File

@@ -0,0 +1,106 @@
# Hola, Mundo
Muchos frameworks proporcionan algún ejemplo de tipo hola mundo, de forma que ¡sería muy grosero por nuestra parte romper esa tradición!
Empezaremos creando un hola mundo muy básico, y luego lo ampliaremos para seguir con los principios del patrón MVC.
## Lo esencial
En primer lugar, tenemos que crear un controlador que kohana usará para manejar la petición
Crea el archivo `application/classes/controller/hello.php` en tu directorio **application** y copia dentro el siguiente código:
<?php defined('SYSPATH') OR die('No Direct Script Access');
Class Controller_Hello extends Controller
{
function action_index()
{
echo 'hello, world!';
}
}
Veamos lo que ocurre:
`<?php defined('SYSPATH') OR die('No Direct Script Access');`
: Deberías reconocer la primera etiqueta como la etiqueta de apertura de php (en caso contrario probablemente deberías [aprender php](http://php.net)). Lo que sigue es una pequeña comprobación que se asegura que este archivo está siendo incluído por kohana. Esto impide que se acceda directamente a este archivo desde la url.
`Class Controller_Hello extends Controller`
: Esta línea declara nuestro controlador, cada clase de tipo controlador tiene que llevar el prefijo `Controller_` y una barra baja delimita la ruta a la carpeta donde se encuentra el controlador (mirar [Convenciones y Estilos](start.conventions) para más información). Cada controlador debe también extender la clase básica `Controller` la cual proporciona una estrcutura estándar para los controladores.
`function action_index()`
: Define la acción "index" de nuestro controlador. Kohana intentará llamar a esta acción si el usuario no ha especificado una. (mirar [Rutas, URLs y Enlaces](tutorials.urls))
`echo 'hello, world!';`
: ¡Y esta es la línea que muestra la famosa frase!
Ahora si abres el navegador y vas a http://your/kohana/website/index.php/hello podrás ver algo como esto:
![Hello, World!](img/hello_world_1.png "Hello, World!")
## Eso ha sido bueno, pero podemos hacerlo mejor
Lo que hicimos en la sección anterior fue un buen ejemplo de lo fácil que es crear una aplicación *extremadamente* básica en kohana (de hecho, ¡es tan básica que no se debe hacer de nuevo!)
Si alguna vez has oído hablar del patrón MVC probablemente te habrás dado cuenta que imprimir contenido al navegador con `echo` en un controlador va totalmente en contra de los principios de este patrón de diseño.
La forma correcta de hacerlo con un framework MVC es usar _vistas_ para manejar la presentación de tu aplicación, y dejar hacer al controlador lo que mejor hace - ¡Controlar el flujo de la petición!
Cambiamos ligeramente el controlador original -
<?php defined('SYSPATH') OR die('No Direct Script Access');
Class Controller_Hello extends Controller_Template
{
public $template = 'site';
function action_index()
{
$this->template->message = 'hello, world!';
}
}
`extends Controller_Template`
: Ahora estamos extendiendo el controlador de plantillas, el cual es más conveniente para usar vistas en nuestro controlador.
`public $template = 'site';`
: El controlador de plantillas necesita conocer que plantilla queremos usar. Automáticamente cargará la vista definida en esta variable y le asignará el objeto de tipo vista.
`$this->template->message = 'hello, world!';`
: `$this->template` es una referencia al objeto tipo vista de nuestra plantilla del sitio. Lo que estamos haciendo es asignar a una variable de la vista llamada "message" el valor de "hello, world!"
Ahora intentamos ejecutar nuestro código...
<div>{{userguide/examples/hello_world_error}}</div>
Por alguna razón kohana lanza una excepción y no muestra nuestro sorprendente mensaje.
Si miramos dentro del mensaje de error podemos ver que la librería View no es capaz de encontrar la plantilla de nuestro sitio, probablemente porque no ha sido creada todavía - ¡*ouch*!
Vamos y creamos el archivo de vista `application/views/site.php` para nuestro mensaje -
<html>
<head>
<title>We've got a message for you!</title>
<style type="text/css">
body {font-family: Georgia;}
h1 {font-style: italic;}
</style>
</head>
<body>
<h1><?php echo $message; ?></h1>
<p>We just wanted to say it! :)</p>
</body>
</html>
Si luego refrescamos la página podremos ver el fruto de nuestra labor -
![hello, world! We just wanted to say it!](img/hello_world_2.png "hello, world! We just wanted to say it!")
## En resumen
En este tutorial has aprendido cómo crear un controlador y usar una vista para separar la lógica de la presentación.
Esto es obviamente una introducción muy básica al trabajo con kohana y no entra de lleno en el potencial que tienes cuando desarrollas aplicaciones con él.

View File

@@ -0,0 +1,7 @@
# Tutoriales
[!!] inacabado
- [Hola, Mundo](tutorials.helloworld)
- [Rutas, URLs, y Enlaces](tutorials.urls)
- [Bases de Datos](tutorials.databases)

View File

@@ -0,0 +1,3 @@
# Rutas, URLs, y Enlaces
[!!] inacabado

View File

@@ -0,0 +1,5 @@
# Actualizando
Obviamente te gustaría actualizar tu código desde la versión 2 a la 3, y para hacer esta transición más fácil hemos recopilado algunos de los principales cambios desde la versión
* [Kohana 2.3](upgrading.23)