Da Bourz Blog

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - codeigniter

Fil des billets - Fil des commentaires

lundi, 13 février 2012

La librairie SimpleLogin-Secure pour Code Igniter

Bon, voilà, j'ai officiellement repris la librairie "SimpleLogin-Secure" pour Code Igniter écrite par Alex Dunae, elle même venant de la lib "SimpleLogin".

SimpleLogin-Secure c'est une petite librairie très sympa est très utile qui vous permet de gérer des utilisateurs (création, suppression, login, logout) avec Code Igniter tout en faisant de l'encryption assez forte grace à Phpass.

En fait elle était un peu abandonnée et j'ai eu besoin de la mettre à jour pour Code Igniter 2.0 car elle ne fonctionnait plus. Du coup j'ai corrigé les bugs, j'ai mis à jour Phpass à la dernière version (la 0.3) et je vous ai mis le tout avec la doc sur Github.

Voilà, hésitez pas à proposer des améliorations ou à signaler des bugs !

Simple Login Secure sur GitHub.

samedi, 28 janvier 2012

Page 404 personnalisée avec CodeIgniter

Dans la catégorie des petits trucs faciles voyons ensemble aujourd'hui comment virer la page 404 par défaut d'une application CodeIgniter.

En effet, si vous utilisez les jolies URLs avec le "Controller" de CodeIgniter qui gere vos liens, toutes les requêtes passerons donc par lui et si le lien n'est pas bon il renverra la page d'erreur du framework, mais en plus sans un 404 correct au niveau de la réponse. Ce qui évidement est mal.

Voyons donc comment régler les deux problèmes simultanément :

D'abord dans le fichier "routes.php" trouvez la ligne :

$route['404_override'] = '';

et remplacez la par :

$route['404_override'] = 'welcome/pastrouve';

Cela suppose que vous avez gardé le "Controller" par défaut de l'application exemple, sinon remplacez par le nom de votre "Controller" principal comme :

$route['404_override'] = 'moncontroleur/pastrouve';

Vous aurez remarqué que je n'utilise pas un "Controller" entier pour faire cette page, mais comme je suis econome je me contente de rajouter une methode dans mon controle principal. Libre à vous d'en créer un si vous en ressentez le besoin.

Donc ensuite ouvrez votre "Controller", ici "Welcome.php" et créez la fonction "pastrouve" :

public function pastrouve()
{
header("HTTP/1.1 404 Not Found");
$this->load->view('view_404');
}

Voilà, très simple, ici on se contente de mettre le bon "Header" avec la fonction adéquate, puis de charger le template personnalisé de notre page d'erreur (ici "view_404.php" dans les vues) et c'est terminé ! Vous pouvez pousser un peu plus loin le bouchon en récupérant l'URL demandée et en la passant en variable au template pour l'afficher à vos visiteurs avec la fonction "current_url()".

Bonne personnalisation, et si vous faites des 404 sympas postez les dans les commentaires.

mardi, 22 février 2011

Upgrader vers CodeIgniter 2.0

Ces temps-ci je suis un peu comme les gens de EllisLab, je prends mon temps entre les billets sur ce blog comme vous avez pu le remarquer. Mais bon, tout arrive, la preuve...

Et donc la fameuse nouvelle mouture de CodeIgniter est sortie en version finale 2.0 ce janvier dernier. je ne vais pas revenir sur les nouveautés ou bien encore la fin du support de PHP 4, mais plutôt vous proposer ma méthode pour passer un projet CodeIgniter 1.x vers la version 2.0 car certaines choses ont changé et si il n'y a rien d'insurmontable vos anciens projets ne marchent plus avec cette nouvelle version.

Alors, commencez donc par récupérer CodeIgniter et dé-zippez l'archive.

Contrairement à l'excellent post de Phil Sturgeon "Upgrading to CodeIgniter 2.0" dont ce billet est inspiré, je vais plutôt partir sur une installation vierge et propre dans laquelle vous déplacerez vos fichiers plutôt que la méthode de Phil qui consiste a faire l'inverse et mettre un CodeIgniter par dessus votre projet.

Vous devez aussi lire les notes concernant l'ugrade dans la documentation officielle, même si c'est abordé ici ça ne fait pas de mal !

Donc, dans l'ordre :

1 - Vous copiez le dossier dé-zippé de CodeIgniter 2.0 sur votre serveur, la ou vous mettez vos applications, a coté de votre application qui est en CodeIgniter 1.x. La grosse nouveauté que vous allez voir immédiatement 'est que le dossier "Application" n'est plus à l'intérieur du dossier "System", il en a été sorti pour se retrouver à coté, et ça c'est bien.

2 - Ouvrez votre nouveau dossier "Application", puis allez dans "Config" et éditez le fichier "config.php" pour remettre les réglages de votre ancienne application, souvent les deux variables de base :

$config['base_url']='http://localhost/mondossier/';
$config['index_page']='';

Je met volontairement la variable "index_page" vide pour avoir de jolies URLs, sans le "index.php" dedans.

3 - Copiez et éditez (si vous n'en aviez pas créez le) votre ".htaccess" qui se trouve à la racine de votre dossier, au niveau des dossiers "system" et "application". Cela sert pour les jolies URLs, surtout si vous avez viré le "index_page" ci dessus. Chez moi j'ai eu un problème avec mon ancien ".htaccess" qui ne marchait plus avec la nouvelle version, je n'ai pas cherché pourquoi, en voilà un qui marche :

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1 [L]

4 - Depuis votre ancien dossier, copiez maintenant vos Controllers dans "Application/Controllers", vos vues dans "Application/Views" et, vous l'aurez deviné, vos Models dans "Apllication/Models". Si vous aviez des librairies faites de même, si vous aviez des Plugins et bien c'est mort, les Plugins ont disparus de CodeIgniter 2.0 et vous devez donc les convertir en "Helpers" ou en "Libraries". Le plus simple reste de les transformer en "Helpers", en effet il suffit de les mettre dans le dossier et de changer le nom depuis "monNom_pi.php" vers "monNom_helper.php". Évidement vous devrez changer vos appels dans vos fichiers et les chargement ou l'"autoload".

5 - Maintenant il faut modifier un peu le code de vos "Models" et vos "Controllers" car des choses ont changé : Maintenant il faut étendre CI_model et CI_Controller, il faut donc changer ça :

class MonModel_model extends Model
class MonController extends Controller

en ça :

class MonModel_model extends CI_Model
class MonController extends CI_Controller

Et il faut également modifier le constructeur, pour remplacer ça :

parent::Controller();

En ça :

parent::__construct();

Râlez pas, demandez pas pourquoi, il faut le faire, c'est tout ! :-)

6 - Enfin, si jamais vous utilisiez encore la vieille classe de validation, ce qui est mal, elle n'existe plus dans cette version 2.0, et comme c'est pas faute d'avoir été prévenu et bien maintenant il faut la changer pour de bon.

Voilà, c'est fini, normalement c'est tout, c'est assez simple finalement, et vous allez pouvoir bénéficier des nouveautés de CodeIgniter 2.0 pour votre application en plus des performances améliorées.

lundi, 12 mai 2008

Code igniter, DreamHost et le "no input file specified"

Code Igniter c'est le framework PHP qui va bien, et vous allez en entendre parler ici même. Cela dit, il y a un ou deux trucs qui m'ont posé des problèmes sur DreamHost (mon hébergeur qu'il est bien), notamment une fois tout fini et tout uploadé je me suis retrouvé avec l'erreur "no input file specified" à la racine du site.

Que j'appelle directement le "/" ou encore le "/index.php/" seul, DreamHost renvoyait le "no input file specified". Il n'y avait que lorsque je mettais le "/index.php" que ça fonctionnait. Voilà pour les symptômes.

Après quelques recherches j'ai identifié le fautif (en plus de DreamHost) : Le fichier ".htaccess". En effet celui livré dans l'installation par défaut de Code Igniter n'est pas terrible (les exclusions à la main) et la dernière ligne foire.

j'ai donc corrigé le ".htaccess", et maintenant ça marche comme un charme ! J'ai commencer par lui dire de ne pas passer dans le framework les vrais répertoires et fichiers et puis sur la "RewriteRule" j'ai viré le "/" au début du fichier "index.php/" :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 L

Voilà, je vous conseille d'utiliser ces règles la dans votre ".htaccess" en général, ça marche bien mieux et il n'y a pas d'exceptions à mettre dedans.

Bientot la suite et quelques billets sur Code Igniter !