westworld tienda significado naruto gato anime php kohana kohana-3

php - tienda - ¿Consejos y características favoritas de Kohana?



kohana tienda (12)

Inspirado en los otros wikis de la comunidad, estoy interesado en conocer los consejos, trucos y características menos conocidos de Kohana.

  • Por favor, incluya solo un consejo por respuesta.
  • Agrega versiones de Kohana si es necesario.

Esta es una wiki de la comunidad .


Agregar datos a tablas dinámicas usando ORM

La función de add ORMs acepta un tercer parámetro donde puede especificar datos adicionales que se guardarán en la tabla 1pivot1.

Por ejemplo, si un usuario tiene muchos roles y un rol tiene muchos usuarios (a través de una tabla llamada 1roles_users1), puede guardar información en la tabla 1pivot pasando una matriz de claves de columna y valores de datos como el tercer argumento del método add .

Kohana 3.1

No soportado. La alternativa sería cargar la pivot table y agregar los datos como lo haría con cualquier otra tabla.

Kohana 3.0

$user->add(''role'', $role, array(''date_role_added'' => time()));

donde $role es ORM::factory(''role'', array(''name'' => ''user''));


Comprobación de una solicitud interna

Estos se conocen como subpeticiones. Eche un vistazo al artículo de Sam de Freyssinets: Escalamiento de aplicaciones web con HMVC para obtener una explicación más detallada. Observe la diferencia de instancia inicial vs instancia entre versiones.

Kohana 3.1

if (Request::initial() !== Request::current()) { print ''Internal called made with Request::factory''; }

Kohana 3.0

if (Request::instance() !== Request::current()) { print ''Internal called made with Request::factory''; }


Desactivar auto_rendering para solicitudes AJAX

Estas muestras de código suponen que se extiende desde el controlador de plantilla.

Kohana 3.1

public function before() { parent::before(); if (Request::current()->is_ajax()) { $this->auto_render = FALSE; } }

Kohana 3.0

public function before() { parent::before(); if (Request::$is_ajax) { $this->auto_render = FALSE; } }


Establecer Kohana :: $ entorno

Pega estas líneas en .htaccess :

SetEnvIf SERVER_ADDR "^(127/.0/.0/.1|::1)$" KOHANA_ENV=development SetEnvIf SERVER_ADDR "^((?!127/.0/.0/.1|::1).)*$" KOHANA_ENV=production

ahora, si estás en el localhost, estás en modo de desarrollo; de lo contrario, estás en modo de producción

Editar: se agregó soporte para IPv6


Generando opciones de Form :: select () a partir del resultado de la base de datos

Kohana 3.1 y 3.0

$options = ORM::factory(''model'') ->order_by(''title'',''ASC'') ->find_all() ->as_array(''id'',''title''); $select = Form::select(''name'', $options);

Cabe señalar que esto no está restringido al ORM y puede utilizarse en todos los resultados de la base de datos (todos admiten as_array). Consulte la información de resultados de la base de datos para obtener más detalles.

Si desea agregar una opción predeterminada:

$options = Arr::merge(array(''Please select a value.''), $options);



Mostrar una página de error

Si necesita mostrar una página de error, Kohana ha incorporado excepciones para ella. Una vez que haya lanzado una excepción, puede crear un controlador de excepción personalizado y mostrar una página de error HTML. Querrá un interruptor para mostrar el error real en el desarrollo.

Kohana 3.1

throw new HTTP_Exception_404(''The article :article was not found'', array('':article'' => $article->name));

El segundo argumento proporciona una forma de reemplazar cadenas en el mensaje de error.

Kohana 3.0

No tiene agrupadas las excepciones HTTP. Debe crear sus propias excepciones y manejarlas. Kohana tiene un tutorial para esto: Kohana - Páginas de error personalizadas


Rutas mantenibles

En lugar de codificar ubicaciones de anclaje en HTML y PHP, es una buena idea revertir el enrutamiento. Esto esencialmente significa que usted define las ubicaciones de las rutas y luego las usa; Si alguna vez necesita cambiar la ubicación, lo hace en un lugar y no en cientos.

Las rutas se pueden definir en cualquier lugar, pero es una buena práctica ponerlas en el bootstrap de la aplicación o en el bootstrap de sus módulos (init.php).

Se establecen de la siguiente manera:

Route::set(''name'', ''<controller>(/<action>)'', array(''action'' => ''login|logout'');

  1. Nombre de la ruta
  2. La ruta de URL para hacer coincidir.
  3. Una expresión regular para limitar con qué se compara la <part> .

Cuando una parte está rodeada por corchetes, esa parte es opcional. Si un usuario no ha proporcionado una pieza y desea proporcionar un valor predeterminado, entonces use el método predeterminado para especificar valores.

->defaults(array(''action'' => ''login''));

Kohana 3.1 y 3.0

El siguiente código ahora se usa para tener rutas reversibles. La ruta de URL se puede actualizar y todas sus URL deben funcionar como antes.

Route::url(''name'', array(''controller'' => ''user'', ''action'' => ''login''));


HMVC + AJAX = is_remote ()

Esta función comprueba ambas: las solicitudes internas y AJAX. Puede ser útil si algunas partes de la página se cargan inicialmente usando la técnica HMVC, y luego se pueden volver a cargar con AJAX. Colócalo dentro de un controlador base, desde el cual extiendes todos tus controladores adecuados (lo llamo ''controlador base''):

public function is_remote() { if ($this->request->is_initial()) { if ($this->request->is_ajax()) { return TRUE; } else { return FALSE; } } else { return TRUE; } }

Una manera más corta (equivalente) de escribir esto:

public function is_remote() { return ( ! $this->request->is_initial() || $this->request->is_ajax()); }

Espero que esto ayude.


Establezca base_url automáticamente:

Kohana::init(array( // ... ''base_url'' => dirname($_SERVER[''SCRIPT_NAME'']), // ... ));

Si su sitio está alojado en 1 y 1, debe usar:

Kohana::init(array( // ... ''base_url'' => substr($_SERVER["SCRIPT_NAME"], 0, strpos($_SERVER["SCRIPT_NAME"], basename($_SERVER["SCRIPT_FILENAME"]))); // ... ));

(tomado del archivo de configuración de Gallery3 )


Para ejecutar una consulta SQL como TRUNCATE mytable con sentencias preparadas , pase null como primer parametro al método DB::query() . Útil, cuando la consulta no se ajusta a ninguna de las operaciones CRUD.


La diferencia entre this->request->route->uri() y this->request->uri() (Kohana 3)

// Current URI = welcome/test/5 // Using default route ":controller/:action/:id" // This returns "welcome/test/5" echo $this->request->uri(); // This returns "welcome/test1/5" echo $this->request->uri(array( ''action'' => ''test1'' )); // This returns "welcome/index" echo $this->request->route->uri(); // This returns "welcome/test1" echo $this->request->route->uri(array( ''action'' => ''test1'' ));

Como puede ver, $ this-> request-> route-> uri () usa los valores predeterminados de las rutas actuales (id es nulo), mientras que $ this-> request-> uri () aplica los segmentos uri actuales.