Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MkFramework Discussion :

Methode delete customisée


Sujet :

MkFramework

  1. #1
    Nouveau membre du Club
    Methode delete customisée
    Bjr
    J'ai des éléments liés entre eux.
    Lorsque je souhaite détruire un élément maitre, afin de rester compatible avec la philosophie de MF je modifie la fonction delete de l'element fils afin qu'elle prenne 2 cas :
    1- Appel pour destruction venant de l'element pere (Objet Qrys)
    2. Appel pour destruction "normale" (objet Keywords)

    Lors de l'appel type 1, il n'y a pas d'URl, donc de token ni de besoin en terme d'affichage.
    Juste une exécution d'un delete de type Sql.

    Le code dans le fichier main.php de keywords est

    public function _delete($Qry_id = NULL){
    $tMessage=$this->processDelete();

    if ( isset($Qry_id)) {
    echo 'cherche avec id qry' . PHP_EOL;
    /* Recherche avec l'id de requete */
    $oKeywords=model_keywords::getInstance()->findManyByQry( $Qry_id);
    $oKeywords->delete();
    return;
    }

    /* recherche avec l'id de keyword */
    $oKeywords=model_keywords::getInstance()->findById( _root::getParam('id') );

    $oView=new _view('keywords::delete');
    $oView->oKeywords=$oKeywords;

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    $this->oLayout->add('main',$oView);
    }
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur

    Il faut bien différencier le model (accès à la base) du module (le controleur qui fait le lien entre le model et les vues)
    si vous souhaitez executer une requete SQL, passer par le model

    Vous ne devez pas avoir de paramètre dans une méthode préfixée par un "_"
    Ces methodes publiques correspondent à des "actions", ou page de votre module

    article::list => module article, méthode _list() ..

    Attention également: findMany retourne un tableau d'objets, il faut utiliser findOne pour retourner un seul enregistrement
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Nouveau membre du Club
    Si je comprends bien :
    je complète mes modèles avec des fonctions de delete dans les fichiers model_xxxx

    /* Delete pour une query */
    public function deleteByQry($Qrys_id){
    return $this->execute('DELETE * FROM '. $this->sTable.' WHERE qrys_id=?',$Qrys_id );
    }

    /* Delete pour un mot cle */
    public function deleteById($uId){
    return $this->execute('DELETE * FROM '.$this->sTable.' WHERE id=?',$uId );
    }
    par contre ou faut il que j'appelle ces méthodes dans l'element pere ?
    Il y a plusieurs cinématiques possibles :
    1) destruction d'un element pere (Qrys) -> destruction de tous les éléments fils, puis de l'élement pere
    2) destruction d'un element fils

    Merci pour votre retour.

  4. #4
    Nouveau membre du Club
    Petite remarque :
    Ne serait il pas intéressant dans le fichier model_xxx d'avoir une méthode deleteById en standard ?

  5. #5
    Nouveau membre du Club
    Pour compléter en esperant etre clair (ce n est pas evident)
    Lorsque je veux detruire un element fils (ie keywords) j'appelle dans le fichier edit.php de mon element pere la methode echo $oViewKeywords->show().
    Celle ci est parfaite et me permet de selection un element pour edit/delete ou show
    Lorsque j'appuie sur le bouton delete par exemple, le soft appelle Qryversions->delete() qui fonctionne bien hormis le fait que je n'ai pas besoin de l'affichage avec la demande de confirmation.
    Et cerise sur le gateau je voudrais revenir à mon écran initial

  6. #6
    Rédacteur

    Vous pouvez, dans votre module appeler ces méthodes.

    model_maTable::getInstance()->deleteByQry ..

    Si c'est une suppression en cascade, vous pouvez simplifier en créant une méthode dans votre modèle qui fera les 2 requetes
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Rédacteur

    Citation Envoyé par frederictb Voir le message
    Pour compléter en esperant etre clair (ce n est pas evident)
    Lorsque je veux detruire un element fils (ie keywords) j'appelle dans le fichier edit.php de mon element pere la methode echo $oViewKeywords->show().
    Celle ci est parfaite et me permet de selection un element pour edit/delete ou show
    Lorsque j'appuie sur le bouton delete par exemple, le soft appelle Qryversions->delete() qui fonctionne bien hormis le fait que je n'ai pas besoin de l'affichage avec la demande de confirmation.
    Et cerise sur le gateau je voudrais revenir à mon écran initial
    Vous pouvez faire cela en ajoutant une méthode _delete() comme suit:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function _delete(){
      //votre code de delete
     
      //suivi d'un 
      _root::redirect('monModule::list');
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  8. #8
    Rédacteur

    Citation Envoyé par frederictb Voir le message
    Petite remarque :
    Ne serait il pas intéressant dans le fichier model_xxx d'avoir une méthode deleteById en standard ?
    Oui pourquoi pas, en attendant que je le mette sur le svn général, vous pouvez l'ajouter dans module/mods/all/model/src/model_example.sample.php

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    class model_#maTable# extends abstract_model{
     
    	protected $sClassRow='row_#maTable#';
     
    	protected $sTable='#maTable#';
    	protected $sConfig='#maConfig#';
     
    	protected $tId=array('#maTable_id#');
     
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
     
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE #maTable_id#=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
     
    	#modelMethods#
    	#modelSaveDuplicateKey#
     
    }


    Vous pouvez ajouter la méthode suivante:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    class model_#maTable# extends abstract_model{
     
    	protected $sClassRow='row_#maTable#';
     
    	protected $sTable='#maTable#';
    	protected $sConfig='#maConfig#';
     
    	protected $tId=array('#maTable_id#');
     
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
     
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE #maTable_id#=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
            public function deleteById($uId){
    		return $this->findOne('DELETE  FROM '.$this->sTable.' WHERE #maTable_id#=?',$uId );
    	}
     
    	#modelMethods#
    	#modelSaveDuplicateKey#
     
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

###raw>template_hook.ano_emploi###