slam4:php:codeigniter:astuces

Ceci est une ancienne révision du document !


Astuces

Le contrôleur de base de codeIgniter correspond à la classe CI_Controller localisée dans system/core.

Classe dérivée

class BaseCtrl extends \CI_Controller{
	
	public function __construct(){ 
	// TODO Auto-generated method stub 
		parent::__construct();
	}
}

Modification de config.php

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 :

  • les librairies chargées (doctrine, jsutils…)
  • le loader load, l'objet ci…

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
	 */
	private $jsutils;
	
	/**
	 * @var CI_Base
	 */
	private $CI;
	
	/**
	 * @var Doctrine
	 */
	private $doctrine;
	
	/**
	 * @var CI_Loader
	 */
	private $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
	 */
	public function isValid(){
		return true;
	}
	
	public function onInvalidControl(){
		header('HTTP/1.1 401 Unauthorized', true, 401);
		exit;
	}
}

  • slam4/php/codeigniter/astuces.1417651218.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)