Le contrôleur de base de codeIgniter correspond à la classe CI_Controller localisée dans system/core.
class BaseCtrl extends \CI_Controller{
public function __construct(){
// TODO Auto-generated method stub
parent::__construct();
}
}
Il est nécessaire de modifier le fichier config.php pour que la classe BaseCtrl soit automatiquement chargée au lancement de l'application :
Ajouter le code suivant à la fin de config.php, en utilisant la fonction php _autoload()
//Fin de config.php
function __autoload($class){
if(strpos($class, 'CI_') !== 0){
$paths = array(APPPATH . 'core/', APPPATH . 'controllers/');
foreach($paths as $path){
if (file_exists($path . $class . EXT)){
@include_once( $path . $class . EXT );
break;
}
}
}
}
Toutes les classes (ne commençant pas par le préfixe CI_) et présentes dans application/controller ou application/core seront automatiquement chargées.
L’inconvénient majeur de php est l'absence de typage des variables, combiné dans le cas présent au fonctionnement même de codeIgniter, les 2 réunis font qu'aucune complétion n'est présente par défaut sur les principaux objets accessibles depuis un contrôleur :
Pour remédier à ce manque et avoir l’auto-complétion Eclipse sur ces objets utilisés fréquemment, il suffit de surcharger CI_Controller, de définir explicitement les membres de données existants, et de les commenter en style javadoc.
Eclipse utilisera les commentaires de type @var pour proposer l’auto-complétion sur les membres concernés.
<?php
class BaseCtrl extends \CI_Controller{
/**
* @var CI_JsUtils
*/
protected $jsutils;
/**
* @var CI_Session
*/
protected $session;
/**
* @var CI_Base
*/
protected $CI;
/**
* @var Doctrine
*/
private $doctrine;
/**
* @var CI_Loader
*/
protected $load;
public function __construct(){
// TODO Auto-generated method stub
parent::__construct();
}
}
<?php
class BaseCtrl extends \CI_Controller{
...
public function __construct(){
parent::__construct();
if(!$this->_isValid())
$this->_onInvalidControl();
}
/**
* retourne Vrai si l'accès au contrôleur est autorisé
* @return boolean
*/
protected function _isValid(){
return true;
}
protected function _onInvalidControl(){
header('HTTP/1.1 401 Unauthorized', true, 401);
exit;
}
}
Helper avec quelques fonctions liées à la requête, à charger dans l'autoload ou directement depuis un contrôleur :
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author jcheron
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc.
* @license lgpl
* @version 1.0
* @filesource
*/
// ------------------------------------------------------------------------
/**
* Request Helpers
*
* @package CodeIgniter
* @subpackage Helpers
* @category Helpers
* @author jcheron
* @link http://slamwiki.kobject.net
*/
// ------------------------------------------------------------------------
/**
* setValuesToObject
* Affecte membre à membre les valeurs du tableau associatif $values aux membres de l'objet $object
* Utilisé par exemple pour récupérer les variables postées et les affecter aux membres d'un objet
* @param Class $object
* @param associative array $values
*/
if(!function_exists("setValuesToObject")){
function setValuesToObject($object,$values=null){
if(!isset($values))
$values=$_POST;
foreach ($values as $key=>$value){
$accessor="set".ucfirst($key);
if(method_exists($object, $accessor)){
$object->$accessor($value);
}
}
}
}
/**
* getPost
* Appel d'une fonction de nettoyage sur le post
* @param string $function
* @return multitype:
*/
if(!function_exists("getPost")){
function getPost($function="htmlentities"){
return array_map($function, $_POST);
}
}