Bonnes pratiques
Introduction
Je vous fournis ici des bonnes pratiques pour utiliser ce framework.Nommage des variables
Php est un langage au typage dynamique, mais il est pratique de connaitre le type d'une variable lorsqu'on l'utilise.Préfixez celle-ci d'une lettre pour indiquer celui-ci:
- i "integer", pour un nombre
- o "object", pour un objet
- t "table", pour un tableau (certains préfèrent a pour array)
- s "string", pour une chaine de caractères
- u "undefined", quand vous attendez plusieurs types pour cette variable
Traitement d'un formulaire
Lorsque vous traitez un formulaire, vous pouvez mettre dans votre action le code comme ceci:Je préconise de séparer l'action du traitement du formulaire
public function _new(){
//traitement du formulaire
$tMessage=$this->processSave();
$oAuteur=new row_Auteur();
$oView=new _view('auteur::new');
$oView->oAuteur=$oAuteur;
$oView->tId=model_auteur::getInstance()->getIdTab();
$oPluginXsrf=new plugin_xsrf();
$oView->token=$oPluginXsrf->getToken();
$oView->tMessage=$tMessage;
$this->oLayout->add('main',$oView);
}
public function _edit(){
//traitement du formulaire
$tMessage=$this->processSave();
$oAuteur=model_auteur::getInstance()->findById( _root::getParam('id') );
$oView=new _view('auteur::edit');
$oView->oAuteur=$oAuteur;
$oView->tId=model_auteur::getInstance()->getIdTab();
$oPluginXsrf=new plugin_xsrf();
$oView->token=$oPluginXsrf->getToken();
$oView->tMessage=$tMessage;
$this->oLayout->add('main',$oView);
}
private function processSave(){
if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
return null;
}
//verification du token (pour eviter les failles xsrf)
$oPluginXsrf=new plugin_xsrf();
if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
return array('token'=>$oPluginXsrf->getMessage() );
}
$iId=_root::getParam('id',null);
if($iId==null){
$oAuteur=new row_auteur;
}else{
$oAuteur=model_auteur::getInstance()->findById( _root::getParam('id',null) );
}
$tColumn=array('nom','prenom');
foreach($tColumn as $sColumn){
$oAuteur->$sColumn=_root::getParam($sColumn,null) ;
}
if($oAuteur->save()){
//une fois enregistre on redirige (vers la page liste)
_root::redirect('auteur::list');
}else{
return $oAuteur->getListError();
}
}
1. on peut réutiliser la méthode processSave pour l'action d'édition et d'ajout (DRY: Don't Repeat Yourself)
2. le code est plus lisible
3. la maintenance est simplifiée