CodeIgniter 4 RC

PHP 7 et Namespace sont de sortie

a marqué ce sujet comme résolu.

Bonjour,

Ce post est destiné aux fans de prêt ou de loin du framework PHP CodeIgniter (open source). Maintenu jusqu'à sa version 2 par l'équipe de Rick Ellis de la société EllisLab, le framework a été cédé à une équipe universitaire de la BCIT (British Columbia Institute of Technology). La version 3.0.0 est sortie le 24 avril 2015 après 3 RC (Release Candidate) et la version 4 en 4.0.0-dev Milestone 1 (2 autres versions sont prévues dans la roadmap) le 25 juin 2016. Ce genre de version n'est évidement pas destiné à la mise en production mais à des fins de tests en local. Cette dernière monture se veut assez différente que la précédente mais surtout 100% compatible avec PHP 7.

Serveur PHP 7 avec Docker sur Linux

Ces instructions ont été réalisé sur Linux Mint 17.3 (cat etc/linuxmint/info) avec Docker en version 1.12.0 (docker version).

Créez un répertoire avec un fichier "Dockerfile" (touch Dockerfile) et un dossier vide "www" (mkdir www). Je vous conseille de créer (à la racine du répertoire), un fichier "index.php" pour afficher les données relatives à PHP avec la fonction phpinfo().

1
<?php echo phpinfo(); ?>
Le Dockerfile

Dans le contenu du Dockerfile, on spécifie les instructions propre à notre futur serveur afin d'avoir MySQLi et Mcrypt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Image
FROM php:7.0.9-apache

# MAJ des paquets
RUN apt-get update && apt-get install -y libmcrypt-dev

# Installation des modules PHP
RUN docker-php-ext-install mysqli mcrypt

# Activation du module d'URL Rewriting
RUN a2enmod rewrite

Dans le terminal, à la racine de votre projet (au même niveau que votre Dockerfile) exécutez les 2 commandes ci-dessous afin de créer le container :

  • Téléchargement et installation de l'image "php:7.0.9-apache" pour créer l'image "php-apache" : sudo docker build -t php-apache . ;

  • Création du docker "php-dev" automatiquement "up" sur le port 80 : sudo docker run -d -p 80:80 --name php-dev -v $(pwd)/www/:/var/www/html php-apache.

L'URL de votre serveur PHP est accessible via http://localhost et les logs du serveur sont disponibles avec sudo docker logs php-dev.

Le dossier "www"

Dans votre terminal, allez dans ce dossier cd www et clonez le dépo Github de CodeIgniter 4 avec git clone https://github.com/bcit-ci/CodeIgniter4.git.

Dans votre navigateur, rendez-vous sur http://localhost/CodeIgniter4/public :)

Homepage

Configuration de MySQL

Pour faire fonctionner MySQL (installé sur votre machine en local) depuis Docker, créez un nouvel utilisateur avec tous les privilèges accordés.

1
2
3
4
mysql -u root -p
USE mysql;
INSERT INTO user(Host, User, Password) VALUES('172.17.0.2','docker',PASSWORD('docker'));
GRANT ALL PRIVILEGES ON *.* TO docker@172.17.0.2 IDENTIFIED BY 'docker' WITH GRANT OPTION;

Changez également la configuration de votre serveur MySQL dans le fichier vim /etc/mysql/my.cnf :

  • Changez la valeur de "bind-address = votre_adresse_ip_locale" ;
  • Commentez la ligne "#skip-external-locking".

Pour prendre en compte ces changements, redémarrez votre serveur avec sudo service mysql restart.

Creez un fichier "db.php" à la racine du dossier "www" pour tester la connexion au serveur.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$server   = "votre_adresse_ip_locale";
$username = "docker";
$password = "docker";

$conn = new mysqli($server, $username, $password);

if ($conn->connect_error) {
    die("Problème de connexion: " . $conn->connect_error);
}
echo "Connexion effectuée :)";

A la (re)découverte du framework

Quelques nouveautés, principalement les plus visibles car il y en d'autres (disparition du fichier "config.php", librairie HTTP Responses, etc…) et il y en aura d'autres dans les 2 prochaines versions "dev".

Nouvelle barre de debug

Sur la page d'accueil, dans le header, on peut voir une nouvelle barre de débug. Elle est affichée car CodeIgniter est en mode "developpement" et non en "production" (define('CI_DEBUG', 1); dans APPPATH/Config/Boot/development.php).

Debug Bar

En ce qui concerne les logs, allez dans le fichier "Config/Logger.php" et changez l'option de la valeur $threshold à 9. Les fichiers de logs sont enregistrés dans le dossier "writable/logs."

Debug Bar Logs

Remarque : si vous avez une erreur avec fopen et le message d'erreur failed to open stream: Permission denied changez le CHMOD du répertoire "logs" à 777 sudo chmod -R 777 /writable/logs/.

Apparition du namespace

Dans le contrôleur par défaut il y a un namespace.

1
2
3
4
5
6
7
8
9
<?php namespace App\Controllers;

class Home extends \CodeIgniter\Controller
{
    public function index()
    {
        return view('welcome_message');
    }
}

Alors que dans la version 3, il n'y en a pas. Petit changement également lors de la déclaration du nom de la classe au niveau du extends \CodeIgniter\Controller au lieu de CI_Controller dans la version précédente (idem pour les modèles avec class MonModele extends \CodeIgniter\Model) mais aussi pour retourner la vue avec return view() au lieu de $this->load->view().

Routage

Les règles de routage s'écrivent désormais de façon plus morderne grâce à l'apparition des namespaces. Extrait du fichier de routage "application/Config/Routes.php" ci-dessous.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php
$routes = Services::routes(true);

$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);

$routes->add('/', 'Home::index');
/* 
    Fonctionne également avec "get"
    $routes->get('/', 'Home::index');
*/
?>

Bye bye la syntaxe avec $route['default_controller'] = 'home';.

Gestionnaire des erreurs

Dans le code du contrôleur, faites-vous violence en ajoutant une erreur dans votre code et vous le droit à une page avec le titre "ErrorException" bien plus complête et plus agréable / jolie que dans la version précédente du framework et ça, c'est franchement une bonne chose pour gagner du temps en développement. :)

Parse Error

Conclusion

L'équipe de CodeIgniter semble vouloir ramener son framework dans la cour des grands dont il a été éclipsé avec le fork de Laravel mais avec sa force qui est sa courbe d'apprentissage. Il y a une partie "Tutorial" intéressante dans la documention officielle.
Et vous, vous en pensez quoi de cette nouvelle version ?

Sources

+4 -0

Remarque : si vous avez une erreur avec fopen et le message d'erreur failed to open stream: Permission denied changez le CHMOD du répertoire "logs" à 777 sudo chmod -R 777 /writable/logs/.

[EtienneR](https://zestedesavoir.com/forums/sujet/6776/codeigniter-4-rc/?page=1#p121005

Ouhla ! Attention à ne pas faire ça sur un serveur accessible depuis l'extérieur, hein ! Jamais de xx7 sur un fichier/dossier accessible faceilement.


Sinon, c'est sympa que CodeIgniter se bouge enfin pour passer à quelque chose de plus moderne, mais au final je ne vois pas trop l'intérêt qu'il y a à devenir plus complexe qu'avant sans pour autant arriver à un niveau comme celui de Laravel.

C'est dommage, j'aimais bien ce framework à une époque, mais ils ont fait de très mauvais choix (non justifiés, qui plus est)…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte