CodeIgniter 4 – Creación de proyecto y repaso por novedades

En este post te voy a mostrar cómo comenzar a programar un proyecto de CodeIgniter versión 4 que recientemente ha alcanzado la fase beta.

CodeIgniter 4, al momento de escribir este post todavía está en beta, pero muy pronto alcanzará la versión estable.

No olvides que para esto se necesita Composer y PHP.

Novedades de CodeIgniter 4

Tenemos varias novedades; la nueva versión de CodeIgniter 4 cuenta con namespaces y una estructura cambiada.

Encontramos todo el MVC en la carpeta app. Los modelos en Models, los controladores en Controllers y finalmente las vistas en Views.

El index.php (punto de entrada de nuestra app) está en public; en ese mismo directorio debemos colocar todo lo que sea público, por ejemplo nuestros archivos de JS, CSS, imágenes, etcétera.

Estructura de directorios en CodeIgniter 4

Una gran novedad es que ahora va a usar Composer para gestionar sus dependencias, como todo software de PHP que se respeta.

La carpeta writable será el directorio en donde se pueden colocar los archivos dinámicos relacionados a nuestra app (por ejemplo, fotos de perfil de usuarios, documentos PDF, etcétera).

Finalmente, dentro de la estructura, vemos que tiene un archivo env que guarda nuestras contraseñas y credenciales para distintos servicios.

Ahora las rutas están en app/Config/Routes.php y pueden especificarse desde ahí, a diferencia de cuando cada ruta pertenecía a un controlador.

Crear aplicación de CodeIgniter 4

Abre una terminal y navega hasta la carpeta padre que alojará el proyecto. Ahí, ejecuta:

composer create-project codeigniter4/appstarter probando-ci4 --stability beta --no-dev

Lo que estamos haciendo es clonar el appstarter de CodeIgniter 4 usando composer create-project.

Crear aplicación de CodeIgniter 4 con Composer

La carpeta o directorio en donde estará la app es probando-ci4

Especificamos --stability beta ya que el proyecto todavía no está estable y composer no dejaría clonarlo si no especificamos esto

La opción de --no-dev es para no instalar las dependencias del desarrollo de CodeIgniter, pues queremos usar CodeIgniter 4 para desarrollar apps, no queremos modificar el núcleo del mismo.

Si visitas tu app en el navegador (en mi caso es http://localhost/probando-ci4/public/) verás que aparece la bienvenida de CodeIgniter 4:

CodeIgniter 4 – Aplicación en navegador

Ahora abre el directorio en donde creaste la app con tu editor de textos o IDE favorito.

Hola mundo en CodeIgniter 4

Para hacer esto muy sencillo vamos a hacer que al visitar una ruta se muestre una vista creada por nosotros y que se muestre la fecha y hora actual.

Creamos la vista en app/Views/hola.php con el siguiente contenido:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Hola CodeIgniter</title>
</head>
<body>
    Estas viendo la vista hola.php

    ¿Sabes qué día es hoy? <?php echo date("Y-m-d") ?>
</body>
</html>

Ahora modificamos el controlador ubicado en app/Controllers/Home.php y agregamos una función para que muestre la vista que acabamos de crear de manera que quede así:

<?php namespace App\Controllers;

use App\Models\UserModel;

class Home extends BaseController
{
	public function index()
	{
		return view('welcome_message');
	}

	public function hola()
	{
		return view('hola');
	}

	//--------------------------------------------------------------------

}

Finalmente vamos a modificar nuestras rutas en app/Config/Routes.php y vamos a agregar lo siguiente en las definiciones de rutas:

$routes->get('/hola', 'Home::hola');

Estamos indicando que cuando se haga una petición get con la ruta /hola se llame al método hola ubicado en el controlador Home.

El archivo completo debe verse así (línea 76):

<?php namespace Config;

/**
 * --------------------------------------------------------------------
 * URI Routing
 * --------------------------------------------------------------------
 * This file lets you re-map URI requests to specific controller functions.
 *
 * Typically there is a one-to-one relationship between a URL string
 * and its corresponding controller class/method. The segments in a
 * URL normally follow this pattern:
 *
 *    example.com/class/method/id
 *
 * In some instances, however, you may want to remap this relationship
 * so that a different class/function is called than the one
 * corresponding to the URL.
 */

// Create a new instance of our RouteCollection class.
$routes = Services::routes(true);

// Load the system's routing file first, so that the app and ENVIRONMENT
// can override as needed.
if (file_exists(SYSTEMPATH . 'Config/Routes.php'))
{
	require SYSTEMPATH . 'Config/Routes.php';
}

/**
 * --------------------------------------------------------------------
 * Router Setup
 * --------------------------------------------------------------------
 * The RouteCollection object allows you to modify the way that the
 * Router works, by acting as a holder for it's configuration settings.
 * The following methods can be called on the object to modify
 * the default operations.
 *
 *    $routes->defaultNamespace()
 *
 * Modifies the namespace that is added to a controller if it doesn't
 * already have one. By default this is the global namespace (\).
 *
 *    $routes->defaultController()
 *
 * Changes the name of the class used as a controller when the route
 * points to a folder instead of a class.
 *
 *    $routes->defaultMethod()
 *
 * Assigns the method inside the controller that is ran when the
 * Router is unable to determine the appropriate method to run.
 *
 *    $routes->setAutoRoute()
 *
 * Determines whether the Router will attempt to match URIs to
 * Controllers when no specific route has been defined. If false,
 * only routes that have been defined here will be available.
 */
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);

/**
 * --------------------------------------------------------------------
 * Route Definitions
 * --------------------------------------------------------------------
 */

// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Home::index');
$routes->get('/hola', 'Home::hola');

/**
 * --------------------------------------------------------------------
 * Additional Routing
 * --------------------------------------------------------------------
 *
 * There will often be times that you need additional routing and you
 * need to it be able to override any defaults in this file. Environment
 * based routes is one such time. require() additional route files here
 * to make that happen.
 *
 * You will have access to the $routes object within that file without
 * needing to reload it.
 */
if (file_exists(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php'))
{
	require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
}

Ahora visita /hola en tu navegador (en mi caso es http://localhost/probando-ci4/public/hola) y debería mostrarse algo así:

Vista de CodeIgniter 4

Has creado tu primer vista con CodeIgniter 4.

Actualizar framework

Cuando haya actualizaciones del framework simplemente hay que ejecutar:

composer update

De esta manera se van a actualizar las dependencias, incluyendo el mismo framework. Adiós a las descargas de zip y todas esas cosas.

Conclusión

No quise hacer esta guía tan larga, y tampoco meterme con bases de datos y otras cuestiones, aunque ya se pueden probar.

Este post fue una introducción a las novedades de CodeIgniter 4, pero recuerda que el framework todavía no está listo para ir a producción, toca esperar más.

De todos modos, CodeIgniter 4 ha cambiado completamente su estructura, cosa que necesitaba realmente.

Finalmente dejo un enlace a la documentación oficial de esta versión 4 del framework de PHP.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *