He estado usando CodeIgniter durante unos tres años y todavía lo sigo haciendo en algunos proyectos. Sin embargo, desde que decidí finalmente darle un giro a Laravel, no ha sido mirar atrás. Estaba bastante impresionado, Laravel es el marco que PHP necesitaba y ha sido un respiro de aire fresco para trabajar. Cualquier proyecto nuevo definitivamente se creará usando Laravel, ya que se envía con mucho más de lo que CodeIgniter hace.
Lo más importante para aquellos que se sientan en la cerca es que la curva de aprendizaje proveniente de CodeIgniter es muy pequeña y solo toma uno o dos días levantarse e ir con Laravel. A partir de ahí, por supuesto, tendrá que invertir algo de tiempo aprendiendo algunas cosas aquí y allá. Pero el tiempo invertido para aprender algunas cosas nuevas en Laravel bien vale la pena a largo plazo, ya que le ahorrará mucho tiempo en el futuro.
Esta guía no pretende ser un tutorial sobre Laravel, sino que solo sirve para dar una idea de cómo se ve parte del código de Laravel y cómo funciona junto con lo que ofrece el marco. He visto muchas publicaciones alabando a Laravel por CodeIgniter, pero realmente no he visto ninguna de por qué exactamente es mejor, así que aquí hay diez razones (entre muchas) que deberían ayudar a comenzar.
1. ORM elocuente
La forma en que diseña sus modelos se basa en las relaciones. Esto realmente cambiará su forma de pensar y diseñar sus aplicaciones. En CodeIgniter, generalmente configuro mis modelos en formato REST, básicamente con funciones de post
, get
, put
y delete
. Con Eloquent todo está hecho por ti. Simplemente defina relaciones y nunca escriba más consultas.
Primero definiríamos nuestra relación así:
clase Post se extiende Eloquent {
protected $ table = ‘publicaciones’;
comentarios de la función pública () {
return $ this-> hasMany (‘Comentario’);
}
}
Entonces podemos hacer llamadas así:
Post :: find ($ id) -> comentarios () -> get ();
También hay una pequeña característica de seguridad fantástica en Laravel que nos permite proteger los campos en nuestras tablas para evitar posibles errores de los desarrolladores. Por defecto, Eloquent no nos permitirá realizar una post
lotes o update
nuestros modelos. Tendríamos que hacer algo manualmente de esta manera:
$ usuario = nuevo usuario ();
$ user-> first_name = Input :: get (‘first_name’);
// etc.
$ usuario-> guardar ();
Sin embargo, si queremos, podemos establecer la variable $fillable
en nuestro modelo y este análisis se realizará automáticamente.
clase Usuario extiende Eloquent implementa UserInterface, RemindableInterface {
protected $ fillable = array (‘primer_nombre’, ‘último_nombre’, ‘correo electrónico’);
}
Podemos simplemente ejecutar una llamada de entrada por lotes de esta manera:
Usuario :: find ($ id) -> update (Input :: all ());
Qué asombroso es eso. Limpio, seguro y elegante. Lo que también me gusta aquí en Laravel sobre CodeIgniter es que cuando creas un nuevo objeto, devuelve ese objeto en lugar de solo la id
como hace CodeIgniter.
Esto apenas está rascando la superficie con lo que está disponible con Eloquent. Pero el formato limpio lo hace muy divertido y mucho más fácil de usar. Por supuesto, puede hacer joins
y consultas más sofisticadas, pero todo sigue el mismo estilo sintácticamente azucarado simple.
2. Enrutamiento
El enrutamiento en CodeIgniter es muy primitivo en comparación con el de Laravel. En CodeIgniter obtienes un archivo de enrutamiento donde puedes configurar alguna redirección y sobrescribir usando (:any)
y (:num)
. Esto funciona muy bien la mayor parte del tiempo, pero Laravel lo sobrealimenta. Es como enrutar con esteroides en comparación con CodeIgniter. En el nivel más básico, veremos una ruta como esta que simplemente redirige a un controlador.
Ruta :: controlador (‘posts’, ‘PostController’);
Sin embargo, también podemos agregarle funciones que nos permitan manejar solicitudes directamente en la ruta. Podríamos escribir casi todo nuestro archivo de rutas solo si realmente quisiéramos.
Route :: get (‘logout’, function () {
if (Auth :: check ()) {
Auth :: logout ();
return Redirect :: to (Config :: get (‘app.url.www’). ‘/’);
}
más {
respuesta de respuesta :: ver (
‘layouts.master’,
array (‘view’ => ‘errors.404’)
, 404);
}
});
También me gusta que podamos filtrar las URL usando patrones de expresión regular y enrutarlas automáticamente si no coinciden. Esto es excelente ya que muchas veces podemos simplemente redirigir a una página 404 si un valor no es un número, como es el caso en buena parte de nuestras solicitudes, especialmente si estamos construyendo una API.
Ruta :: get (‘diccionario / {carta?}’, ‘ [Correo electrónico protegido] ‘)
-> where (‘letra’, ‘[A-Za-z]’);
Además de eso, también podemos crear filtros por separado y adjuntarlos a cualquier ruta que queramos. Esto es ideal para cosas como un administrador o cualquier otra parte de su aplicación que requiera algún tipo de autenticación.
Ruta :: filter (‘auth’, function () {
if (Auth :: invitado ()) {
return Redirect :: to (‘inicio de sesión’)
-> con (‘error’, ‘Debe iniciar sesión’);
}
});
Ruta :: when (‘perfil’, ‘auth’);
Ruta :: when (‘perfil / *’, ‘auth’);
Nuevamente siento que apenas estoy rascando la superficie aquí. Lo que realmente me gusta de todo es que puedes poner toda esta lógica de control de flujo para tu aplicación en dos archivos, filters
y routes
que realmente te dan una visión general de toda tu aplicación.
3. DESCANSO
Si ha creado algún tipo de aplicación REST usando CodeIgniter, indudablemente ha utilizado o al menos ha encontrado la implementación REST de Phil Sturgeon para CodeIgniter. Es bastante fácil aparecer y usar de inmediato. Sin embargo, tener algo horneado directamente hace la vida un poco más fácil.
Laravel se envía con una implementación REST y podemos crear una ruta genérica que se asigna automáticamente a los recursos en el controlador. Por ejemplo, en nuestro archivo routes.php
, podemos crear una ruta así:
Route :: resource (‘posts’, ‘PostsController’);
Esto se asigna automáticamente a siete métodos en nuestro controlador.
La clase PostsController extiende \ BaseController {
índice de función pública () {
// Muestra una lista del recurso.
}
función pública create () {
// Muestra el formulario para crear un nuevo recurso.
}
tienda de funciones públicas () {
// (POST) Almacena un recurso recién creado en almacenamiento.
}
función pública show ($ id) {
// (GET) Muestra el recurso especificado.
}
función pública editar ($ id) {
// Muestra el formulario para editar el recurso especificado.
}
actualización de la función pública ($ id) {
// (PUT) Actualiza el recurso especificado en el almacenamiento.
}
función pública destruir ($ id) {
// (DELETE) Elimina el recurso especificado del almacenamiento.
}
}
Por supuesto, podemos eliminar las funciones de create
y edit
si no queremos los componentes de la interfaz. También podemos guardar esto en una carpeta /controllers/api
si queremos mantener nuestros controladores API separados. Entonces solo enruta así:
Route :: resource (‘api / posts}’, ‘api \ PostsController’);
4. Artesano
Artisan es un pequeño script PHP en Laravel disponible desde la línea de comandos que puede usar para obtener información sobre su aplicación, así como para generar y optimizar automáticamente el código. La mayoría de las veces usará el comando migrate
para actualizar el esquema de su base de datos, pero también tiene un montón de otros comandos útiles que puede ver ejecutando:
lista de artesanos php
También puede desarrollar sus propios comandos artesanales que le permitan ampliar sus funciones. Por ejemplo, tengo un comando personalizado que respalda mi base de datos que ejecuto antes de ejecutar cualquier comando de migración.
Simplemente no hay nada como esto en CodeIgniter y, aunque es bastante fácil copiar y pegar cosas como un controlador que tiene esta característica, especialmente para la migración es algo difícil de vivir sin una vez que te acostumbras.
5. Migraciones
Con CodeIgniter no hay una manera fácil de mantener su esquema sincronizado en entornos o desarrolladores. La forma típica es crear una carpeta de esquema y simplemente agregar cualquier cambio de esquema allí en un archivo con una marca de tiempo como su nombre de archivo. Esto funciona en su mayor parte, pero se vuelve desordenado y es un poco complicado. Sin mencionar que si desea poder revertir cualquier cambio, solo aumenta la complejidad.
Si comienza a tener muchos cambios de esquema o necesita reconstruir su esquema, entonces debe obtener un volcado de alguien o debe ejecutar todos los archivos de esquema uno tras otro.
Este es un pequeño dolor de cabeza eliminado por Laravel. El comando migrate le permite mantener fácilmente sincronizados sus esquemas ejecutando algunos comandos simples. Los tres comandos que usará con más frecuencia serán:
php artisan migrate: make create_posts_table
php artesanal migrar
php artisan migrate: rollback
El primer comando crea un nuevo archivo de esquema en el que puede ingresar sus cambios. El segundo comando actualiza su esquema con todos los nuevos esquemas que aún no se han ejecutado. El tercer comando simplemente revierte el último archivo de esquema de migración que se ejecutó.
Lo bueno es que cuando genera un archivo de migración, viene con dos funciones para actualizar y revertir su cambio, respectivamente, llamado up
y down
.
La clase CreatePostsTable extiende la migración {
función pública arriba () {
Schema :: create (‘posts’, function ($ table) {
$ tabla-> incrementos (‘id’);
$ tabla-> cadena (‘contenido’, 1000);
$ tabla-> tinyInteger (‘estado’) -> unsigned () -> index ();
$ tabla-> marca de tiempo (‘created_at’) -> index ();
$ table-> timestamp (‘updated_at’) -> index ();
});
}
función pública inactiva () {
Esquema :: dropIfExists (‘publicaciones’);
}
}
También hay una funcionalidad de inicialización que puede ejecutar opcionalmente para inicializar sus tablas con datos. Su configuración es bastante similar y se puede ejecutar de la misma manera usando la opción –seed
o ejecutando el siguiente comando:
php artisan db: semilla
6. Compositor
Composer es una manera dulce de agregar y mantener paquetes en su aplicación. Simplemente agregue algunas líneas en su configuración que especifiquen el paquete y algunos alias, presione la actualización del compositor y se instalará automáticamente. También presionar la actualización en el futuro extraerá automáticamente la última versión para usted. Por supuesto, también tiene la opción de mantener una determinada versión del paquete si lo desea.
Si abrimos nuestro archivo composer.json
veremos un área require
donde podemos agregar paquetes. Aquí hay un ejemplo con un paquete de agente de usuario que me gusta usar para obtener fácilmente información sobre el navegador de los usuarios.
“exigir”: {
“laravel / framework”: “4.0. *”,
“mews / useragent”: “dev-master”
},
Luego agregamos los siguientes alias en el archivo `config / app.php`:
‘proveedores’ => array (‘Mews \ Useragent \ UseragentServiceProvider’, // etc …),
‘aliases’ => array (‘Agente’ => ‘Mews \ Useragent \ Facades \ Useragent’, // etc …),
La capacidad de encontrar fácilmente nuevos paquetes y mantenerlos actualizados, incluido el marco en sí, es una gran carga de la que liberarse. Sin mencionar que los paquetes serán mucho más estables ya que es probable que ya sean utilizados por muchos otros desarrolladores.
Los paquetes incluyen todo, desde oAuth hasta Twitter y Facebook SDK. Existen algunas fuentes para obtener paquetes, pero probablemente sea mejor usar el [repositorio oficial de Laravel] ( http://registry.autopergamene.eu/ ).
## 7. Templating
Nunca he sido un gran admirador de ningún sistema de plantillas. Siempre pensé que agregaba gastos generales innecesarios y quién quiere aprender una sintaxis completamente nueva y una forma de hacer las cosas cuando PHP ya funciona bien. Pero la verdad es que realmente disfruto usando Blade. Definitivamente tiene algunos atajos agradables como la función de inclusión con su notación de puntos para obtener vistas dentro de las carpetas. Por ejemplo, si quisiéramos obtener el `views / posts / index.blade.php`:
@include (‘posts.index’)
Puede hacer eco de cualquier variable simplemente usando la notación `{{}}`. Tenga en cuenta que simplemente está ejecutando código php con un `echo` delante de él.
{{ ‘algunos’ . $ var. ‘aquí’ }}
También me gusta que simplemente mantiene el código limpio y hace que sea mucho más fácil verlo. Es mucho mejor que usar “etiquetas en todo el lugar”.
@if ($ var === verdadero) Sí, es cierto: {{$ var}} @endif
Esto es solo algo básico, pero hay cosas más avanzadas que puede hacer, como definir una `@ sección` en una plantilla maestra y luego sobrescribirla en sub plantillas. Esto le brinda una flexibilidad interesante para sobrescribir componentes en una página.
CodeIgniter no proporciona ninguna plantilla fuera de la caja. No sería demasiado difícil instalar algo como plantillas inteligentes o cualquier otra que pueda existir, pero nuevamente es solo un paso adicional. Además, sin Composer, ese paso adicional se convierte en más pasos en el camino para el mantenimiento.
## 8. Autenticación
Me gusta que Laravel viene con toda la funcionalidad que necesita para registrarse e iniciar sesión en sus usuarios. Esto es genial y te ayuda a comenzar a crear una nueva aplicación realmente rápido. Incluso hay algunos paquetes populares que puede instalar que tienen listos todos los procesos de autenticación y activación.
Podemos generar un hash para nuevos usuarios utilizando la clase hash:
Hash :: make (Input :: get (‘contraseña’));
Entonces podemos autenticarnos usando el práctico método de ‘intento’ a continuación, donde ‘correo electrónico’ puede ser un correo electrónico o un ‘nombre de usuario’.
Auth :: intent (array (’email’ => Input :: get (’email’), ‘password’ => Input :: get (‘password’)));
Si el método `intent` devuelve verdadero y el usuario inicia sesión en una sesión con el objeto de usuario, se crea automáticamente para nosotros, a la que podemos acceder usando:
Auth :: usuario (); Auth :: user () -> id; // etc …
También podemos agregar elementos adicionales a este objeto si nos gusta:
Auth :: user () -> admin = true;
No es mucho más fácil que eso, el código es seguro y fácil de usar. Los métodos prácticos hacen que lidiar con la creación y autenticación de usuarios sea muy fácil, lo que nos permite concentrarnos rápidamente en la creación de nuestra aplicación. Con CodeIgniter no tenemos nada como esto y nuevamente nos obliga a encontrar un paquete que nuevamente no podamos mantener a través de ningún tipo de mecanismo de empaque como Composer.
## 9. Fachadas
Sin entrar demasiado en ello, la idea es que todos sus objetos sean accesibles a través de lo que parecen ser llamadas a métodos estáticos utilizando el patrón de diseño de fachada. Esto es genial y es lo que hace que cosas como `User :: find (1);` sean tan limpias y elegantes de usar. Todo en Laravel se maneja de esta manera, pero no se deje engañar, no son llamadas a métodos estáticos. Todos los detalles de instanciación se manejan detrás de escena.
Por ejemplo, si tuviéramos que crear un objeto y luego llamar a un par de métodos:
SomeObj :: set (‘prueba’, 3); SomeObj :: get (‘prueba’); // Debería ser 3. ~~
En el ejemplo anterior nos estaríamos refiriendo al mismo objeto y todo simplemente sucede mágicamente para nosotros. Esto es súper limpio y hace que el código sea mucho más fácil de trabajar. En CodeIgniter tendríamos que configurar una biblioteca para autoload
en la configuración o siempre incluirlos primero en nuestros controladores. A continuación se muestra un ejemplo con CodeIgniter y Laravel.
// CodeIgniter
$ this-> load-> model (‘users_model’);
$ this-> users_model-> get (1);
// Laravel
Usuario :: find (1);
En nuestra implementación, utilizamos pequeños métodos de envoltura en ayudantes para evitar esto. Pero es solo más código y más espacio para errores y no sale de la caja. Esto es frustrante si estás comenzando un nuevo proyecto y ninguna de estas pequeñas adiciones ya has hecho allí.
Las fachadas son un tema un poco más complicado si desea comenzar a construir sus propias bibliotecas, pero un buen lugar para comenzar es el Tutorial Tuts + de Jefferey Way que brinda una buena descripción general.
10. Mail
Esta es otra cosa con la que probablemente lidiarás, en la que me gusta la forma en que se implementó Laravel. Primero, la configuración para el correo está en el archivo config/mail.php
. Esto no es un gran problema, ya que podríamos simplemente agregar algo como esto en CodeIgniter. Pero también me gusta la forma en que podemos adjuntar fácilmente plantillas al correo electrónico enviado.
Mail :: send (’emails.activate’, array (‘usuario’ => $ usuario), función ($ mensaje) {
$ mensaje-> asunto (‘Activación de cuenta’);
$ mensaje-> a ($ usuario-> correo electrónico);
});
En el ejemplo anterior tenemos la plantilla que queremos usar, algunos datos para pasar a la plantilla y una función que nos permite modificar algunos de los parámetros de correo que en este caso es el asunto y el destinatario del correo electrónico. Luego, podemos almacenar todas nuestras plantillas de correo electrónico en una carpeta, lo que hace que sea muy fácil de editar.
En CodeIgniter tuvimos una implementación similar que construimos en un asistente que extraería vistas y nos permitiría enviar correos electrónicos fácilmente. Pero no puedo decirlo lo suficiente, es como si Laravel acabara de sacar todas las pequeñas molestias de CodeIgniter y nos hiciera la vida más fácil. Todas las pequeñas cosas que se implementaron constantemente sobre CodeIgniter salen de la caja con Laravel.
Puedes obtener Tut gratis aquí
Proporciono soporte para la aplicación Laravel a través de este concierto