Esqueleto de aplicación web con Codigniter 4 y Shield

Caso todos los framework de PHP, al menos los más populares, tienen una forma más o menos automatizada de comenzar una aplicación web desde cero formando un esqueleto de código utilizable para, a partir de él, comenzar a programar el resto de la aplicación.

En el caso del framework Codeigniter, suponiendo que ya tenemos montado un entorno LAMP donde trabajar, en el cual tengamos además instalado el programa Composer para la gestión de dependencias, el proceso para hacerlo sería el siguiente:

En el directorio raíz de nuestro servidor web, creamos el esqueleto básico de la aplicación usando Composer, con el siguiente comando:

composer create-project codeigniter4/appstarter shield

Esto nos genera una carpeta de nombre shield en la que se ha instalado el código base de Codeigniter 4.

A continuación modificamos el nombre del archivo env, que se encuentra en el primer nivel de directorios de dicha carpeta, llamándole .env

Abrimos ese archivo y modificamos la línea donde se especifica la url base de la aplicación, poniendo la que corresponda a la nuestra. Es muy recomendable crear un host virtual en nuestro servidor web, que en este caso podría llamarse shield.local. La línea quedaría entonces:

app.baseURL = 'http://shield.local'

A continuación tenemos que incluir la información necesaria para hacer la conexión a nuestra base de datos, editando el archivo app/Config/Database.php en el que modificaremos la definición de la variable $default para que quede:

 public array $default = [
        'DSN'          => '',
        'hostname'     => 'localhost',
        'username'     => '<mi_usuario>',
        'password'     => '<mi_password>',
        'database'     => '<mi_database>',
        'DBDriver'     => 'MySQLi',
        'DBPrefix'     => '',
        'pConnect'     => false,
        'DBDebug'      => true,
        'charset'      => 'utf8mb4',
        'DBCollat'     => 'utf8mb4_general_ci',
        'swapPre'      => '',
        'encrypt'      => false,
        'compress'     => false,
        'strictOn'     => false,
        'failover'     => [],
        'port'         => 3306,
        'numberNative' => false,
        'dateFormat'   => [
            'date'     => 'Y-m-d',
            'datetime' => 'Y-m-d H:i:s',
            'time'     => 'H:i:s',
        ],

Con esto ya tendríamos una aplicación funcionando, a la cual se puede acceder entrando en la dirección que corresponda a nuestra aplicación, por ejemplo http://localhost/shield o http://shield.local si hemos definido un host virtual.

Un complemento muy interesante de Codeigniter es Shield. Con él, podemos dotar a nuestra aplicación de funcionalidades de autenticación y autorización de forma muy sencilla. Podemos instalarla mediante Composer ejecutando dentro del directorio raíz de nuestra aplicación losl comandos:

composer require codeigniter4/shield
php spark shield:setup 

Una vez que se ejecutan estos comandos sin error, podemos visitar la página de login que se nos ha creado en http://appStarter.local/login

Si, por ejemplo, queremos que los que usen la aplicación estén obligados a identificarse antes de usarla, no tenemos más que entrar en el fichero app/Config/Filters.php y en la definición de la variable $globals poner qué páginas se pueden visitar sin estar autenticado, que serían solamente aquellas relacionadas con el proceso de identificarse o darse de alta. El archivo quedaría como vemos a continuación, donde la línea a incluir aparece macada en negrita:

    public array $globals = [
        'before' => [
            // 'honeypot',
            // 'csrf',
            // 'invalidchars',
            'session' => ['except' => ['login*', 'register', 'auth/a/*', 'logout']],
        ],
        'after' => [
            'toolbar',
            // 'honeypot',
            // 'secureheaders',
        ],
    ];

De esta forma, si navegamos de nuevo a la dirección inicial de nuestra aplicación. http://shield.local, veremos que nos dirige automáticamente a la página de login.

En la web de Codeigniter podemos consultar más información sobre el uso de Codeigniter y Shield.

Cómo ver VirtualBox a pantalla completa

Cuando instalamos VirtualBox y creamos una máquina virtual GNU/Linux en él, inicialmente la resolución que nos presenta suele ser menor que la que disponemos en la pantalla del anfitrión. Para ver la máquina virtual a pantalla completa hay que pulsar las teclas Ctrl derecha + F (en caso de que la tecla anfitrión sea esa, lo podemos comprobar en la esquina inferior derecha de la ventana de VirtualBox) o seleccionar la opción Ver / Modo a pantalla completa en las opciones de la ventana en la que se ejecuta la máquina virtual. Lo habitual también suele ser que al hacerlo tampoco veamos la máquina virtual a pantalla completa, sino la misma resolución con un borde blanco o negro que rellena alrededor. Eso se debe a que antes hay que hacer un par de cosas:

En la máquina virtual, instalar los headers del kernel. Por ejemplo en las distribuciones Red Hat/Fedora/CentOS sería:

sudo dnf install kernel-devel
sudo dnf install kernel-headers

A continuación montamos el CD de las «guest additions» (traducido horriblemente como «complementos del invitado») seleccionando la opción Dispositivos / Insertar imagen de los complementos del invitado en la ventana de VirtualBox en la que se está ejecutando la máquina virtual

A continuación abrimos el navegador de archivos y nos situamos en la unidad del CD de los complementos

Hacemos click derecho en la ventana y seleccionamos «Abrir un terminal», ejecutando en él:

sudo ./VBoxLinuxAdditions

Si la ejecución no nos da ningún error, ya podremos ver la ventana de la máquina virtual a pantalla completa al pulsar Ctrl derecha + F , aunque es posible que solo lo haga después de un reinicio.

Conectar NetBeans a un repositorio de GitHub

Es fácil trabajar en NetBeans utilizando Git como controlador de versiones, pero para hacer la conexión correctamente con GitHub hace falta seguir una serie de pasos que son los siguientes:

  • Crear el repositorio en GitHub, no hace falta incluir contenido.
  • Creamos el proyecto en NetBeans, o entramos en un proyecto que ya tengamos y queramos versionar en GitHub.
  • Hacer click derecho en el proyecto en el árbol de directorios de la izquierda en NetBeans, y seleccionamos «Versioning / Initialize Git repository»
  • Hacer otra vez click derecho sobre el proyecto y seleccionar «Git / Add»
  • Hacer otra vez click derecho sobre el proyecto y seleccionar «Git / Commit, seleccionando todos los elementos y especificando un texto explicativo del commit.
  • Hacer otra vez click derecho sobre el proyecto y seleccionar «Git / Push»

De esta manera ya tenemos creado y versionado el proyecto en local. Ahora lo conectamos con el repositorio de GitHub haciendo lo siguiente:

  • Hacer click derecho sobre el proyecto y seleccionar «Git / Remote / Push»
  • Especificamos el repositorio remoto, por ejemplo si hacemos la conexión con claves ssh la dirección será del tipo git@github.com:<miUsuario>/<miProyecto>.git
  • Al hacer el push nos preguntará en qué rama y seleccionaremos la rama «master», aceptando la pregunta «Set up remote tracking?»

Puede ser que al hacer este Push solo nos aparezca una rama o que aparezcan dos: una «main» que es la que creó GitHub al inicializar el repositorio y que no tiene apenas contenido, y otra «master» que es la que acabamos de crear. En ese caso, vamos a GitHub, seleccionamos la rama «master» como la rama por defecto y posteriormente borramos la rama «main». De esta forma ya se queda el repositorio preparado para versionar el proyecto.