php - ¿En qué se diferencia Kohana de CodeIgniter?
kohana-3 codeigniter-2 (2)
He estado usando CodeIgniter durante mucho tiempo, sin embargo últimamente he estado sintiendo la necesidad de pasar a un marco de OOP más avanzado / más. Kohana parece ser una opción que a menudo se recomienda, mi pregunta es, ¿en qué se diferencia Kohana de CodeIgniter? Una lista de diferencias, en particular las diferencias de sintaxis, sería genial.
Escribiré sobre Kohana 3.1 y las principales ventajas que he visto sobre CodeIgniter 2 hasta ahora. Antes de Kohana 3.0 (hace año y medio), utilicé CodeIgniter, ZF, Symfony, Cake y probé muchos otros (por el momento intento hacer Yii solo porque tengo que hacerlo). Soy consciente de que muchos me escupirán por "ser subjetivo". Adelante.
Estricto PHP 5.2
Kohana no usa el código anterior (es decir, 2.xo CodeIgniter) en la versión actual. Fue totalmente reescrito para estar completamente orientado a objetos y no para entrar en el camino del desarrollador. En pocas palabras, se siente natural desarrollarse con él, como si fuera el "camino" para el desarrollo de PHP.
Este es un marco construido "por la comunidad, para la comunidad", no con fines promocionales. Y no por / para ninguna comunidad, sino muy leet.
CodeIgniter se detuvo por mucho tiempo colgando en PHP4. En cuanto a la fuente de los CI2, no puedo decir que hayan pasado a PHP5 (supongamos que PHP 5.1 no es realmente ... PHP 5). He visto FuelPHP, que parece ser más como una combinación de CI2 con Kohana que una rama de CI2, aunque debo decir que definitivamente tiene potencial.
HMVC
La razón principal por la cual Kohana se siente natural nació de este patrón. La idea era aislar cada solicitud para respetar el patrón y terminó respetando el RFC 2616. Ahora tiene un objeto de respuesta separado para cada solicitud, pudiendo reutilizar su código de una manera realmente ordenada. En este momento estoy trabajando en un servicio web que se utiliza con iPhone, Android y la aplicación web. No puedo describir el privilegio de llamar a la API "por dentro". Ejemplo crudo:
public function action_delete()
{
$deleted = Request::factory(''api/route'')
->method(Request::DELETE)
->headers(''Accept'', ''text/html'')
->execute();
$this->response->body($deleted);
}
Sin desventajas
El equipo detrás de Kohana está dedicado a hacer que el marco "sea lo mejor posible ", no "todo lo que puede ser, porque ... tenemos demasiado tiempo libre". Cada versión de mantenimiento es retrocompatible con las anteriores (por ejemplo, 3.1.2 con 3.1.0), con todos los cambios "importantes" esperando las versiones menores (por ejemplo, 3.1 no es totalmente compatible con versiones anteriores de 3.0 "de fábrica"). Las versiones menores anteriores se mantienen durante 6 meses después de la publicación del nuevo.
Exten (ding | sions)
El sistema de archivos en cascada de Kohana hace que sea extremadamente fácil extender los componentes existentes, o incluso los que utilizan los proveedores. Puede anular todo a nivel de aplicación / módulo, sin pensar en configurar rutas de inclusión / carga manualmente en cualquier lugar (porque todos los archivos y carpetas respetan la misma convención).
Hay un montón de módulos , incluido Zend Framework. ¿Como es que? En pocas palabras, incluso puede usar ZF o cualquier otra biblioteca como módulo dentro de su aplicación Kohana.
Además de todos los módulos construidos por la comunidad, cada instalación de Kohana incluye algunas de las cuales casi todas las aplicaciones se pueden beneficiar de:
Auth Una biblioteca de autenticación simple, pero muy poderosa. El módulo en sí proporciona solo el controlador de autenticación de archivo pero al habilitar ORM nos da uno más poderoso.
Biblioteca de almacenamiento en caché de caché con controladores para las técnicas de almacenamiento en caché más populares: APC, eAccelerator, archivo, Memcache, SQLite, Wincache y Xcache. Es extremadamente fácil de implementar y cambiar (incluso los cambios posteriores del controlador de caché son de una sola línea).
Codebench Si necesita comparar algún código, Codebench le proporciona una forma muy simple de hacerlo.
Base de datos Como todo lo demás en Kohana, el módulo de base de datos también está completamente orientado a objetos y extensible. Viene con soporte completo de MySQL y PDO.
Image Un módulo simple para manipular imágenes fácilmente
ORM ORM predeterminado basado en el patrón ActiveRecord, aprovechando al máximo las ventajas del módulo de base de datos combinado con los métodos mágicos de PHP 5. Además de este, puedes usar Jelly, Sprig, AutoModeler o cualquier otra libre PHP personalizada como Doctrine.
Unittest Kohana viene pre-empaquetado con un gran módulo de pruebas unitarias. Se basa en PHPUnit y se "integra completamente" con su aplicación, lo que le permite TDD muy fácil . Además, todo el marco está probado en unidades.
Userguide Aunque es ignorado por la mayoría de los desarrolladores, este módulo es una de las funciones más poderosas de Kohanas. Proporciona la forma más fácil de rastrear su API y el resto de la documentación de Kohana. ¿Por qué su aplicación no tendría su propia guía también? ¡Ni siquiera tienes que pensar en eso! Siempre que realice un seguimiento de los comentarios / convenciones en su código, este módulo se encargará del resto.
Ejemplos de código
El código es más nítido que el de CI, tiene todas las clases cargadas automáticamente, aunque las convenciones son muy similares.
Ejemplo de actualización (usando ORM):
public function action_update($post_id)
{
$post = ORM::factory(''post'', $post_id);
$errors = array();
if ($values = $this->request->post())
{
try
{
$post->values($values)->update();
$this->request->redirect(''post'');
}
catch (ORM_Validation_Exception $e)
{
$errors += $e->errors();
}
}
$this->template->content = View::factory(''post/update'', array(
''post'' => $post,
''errors''=> $errors,
));
}
En este ejemplo, ORM se usa para actualizar una fila y tiene el método call () de update () para validar sus valores. En caso de que la validación falle, se detecta ORM_Validation_Exception y el resto del bloque try no se ejecuta (es decir, se redirecciona a / post). Al final, tanto el objeto post (Model_Post) como la matriz de errores se pasan a Ver, donde se puede acceder directamente.
Tenga en cuenta que todos los métodos Database_Query_Builder están disponibles dentro de ORM, por lo que también puede hacer cosas ''fantasiosas'' como:
ORM::factory(''post'')
->where(''user_id'',''='',$user_id)
->join(''users'',''INNER'')
->on(''users.id'',''='',''posts.user_id'')
->find_all();
O (con las relaciones):
$user = ORM::factory(''user'', $id);
foreach ($user->posts->find_all() as $post)
{
foreach ($post->quotes->find_all() as $quote)
{
if ($quote->illegal())
{
$quote->delete();
}
}
}
Donde illegal () puede ser un método personalizado a nivel de modelo con combinaciones de fantasía y esas cosas. Soy consciente de lo ineficiente que es este pedazo, es solo un ejemplo de código, no "son MEJORAS mejores que consultas adicionales" :)
Por favor, eche un vistazo a https://.com/questions/717836/kohana-or-codeigniter donde el enlace - http://onwired.com/blog/exploring-kohana-as-an-alternative-to-codeigniter/ - respondió la mayor parte de esta misma pregunta para mí.