[Risolto] Override Del Metodo Delete O Di Beforedelete ?

Dato che oramai sta cosa di impedire la cancellazione dei record la sto facendo in tutte le liste …

… stavo pensando se era il caso, invece di modificare la actionDelete, di eseguire un override della CActiveRecord->delete(), copia/incollando il sorgente attuale della delete e facendogli fare isActive=0 e save() invece del delete fisico.

o ancora, se era meglio fare l’override del beforeDelete, copia/incollando il sorgente attuale, facendo isActive=0 e save() e restituendo false per impedire la cancellazione (ma questa cosa mi piace di meno)

voi come fareste ?

Fai l’override dei metodi delete e deleteAll:


public function delete()

{

  $this->isActive=0;

  $this->save();

  return true;

}


public function deleteAll($condition, $params)

{

   return $this->updateAll(array('isActive'=>1), $condition, $params);  

}

Puoi farti una masterclass che estende CActiveRecord in modo da non dover ripetere il codice ovunque.

L’idea della ‘NotDeletableRecord’ che estende ‘CActiveRecord’ non è male, anzi.

Dove va posizionato questo php ?

Grazie per il suggerimento dell’override anche di deleteAll, tranne per l’1 che dev’essere zero :)

non è meglio che faccio la delete direttamente così ?




public function delete() 

{ 

    if(!$this->getIsNewRecord()) 

    { 

        Yii::trace(get_class($this).'.delete()','system.db.ar.CActiveRecord'); 

        if($this->beforeDelete()) 

        { 

            $this->isActive=0;

            $result = $this->save(); 

            return $result; 

        } 

        else 

            return false; 

    } 

    else 

        throw new CDbException(Yii::t('yii','The active record cannot be deleted because it is new.'));

}






E’ il sorgente copia/incollato da http://www.yiiframework.com/doc/api/1.1/CActiveRecord#delete-detail

così non perdo funzionalità nell’estendere la classe

Molto meglio.

Fai una classe in components in modo che sia inclusa automaticamente.