[Risolto] I Model, Le Loro Estensioni E I Loro Nomi

Ciao a tutti, domando aiuto per una cosa:

Ho un model, "Progetto".

Lo estendo nel model "Proroga", vado sul controller ProrogaController e ho la mia actionCreate, la mia view etc

e gli id del form sono del tipo Proroga_attributo.

Fin qui perfetto.

Poi faccio l’update e… e gli id e i nomi sono Progetto_attributo.

Visto che io progetto non lo richiamo mai secondo voi perché nell’update mi prende il nome della classe estesa e non della mi classe in uso?

Posteresti il metodo actionCreate?

actionCreate


public function actionCreate($cartella_id, $is_ripresa_in_carico=0) {


        $model = new Proroga();

        $model->cc_id_fk=$cartella_id;

        $model->ccIdFk=Cclinica::model()->findByPk($cartella_id);

        $paziente_id = $model->ccIdFk->pz_fk_id;

        $numeroCartella = $model->ccIdFk->cc_codice;

        $model->idProgettoPrecedente=$model->ccIdFk->progettoUltimo[0]->pr_id;

        $model->ProgettoPrecedente=Progetto::model()->findByPk($model->idProgettoPrecedente);

        $model->pr_faseriab_fk =  $model->ProgettoPrecedente->pr_faseriab_fk;

        $model->pr_diagnosi=$model->ProgettoPrecedente->pr_diagnosi;

        $model->pr_note=$model->ProgettoPrecedente->pr_note;

        $model->pr_diagnosi_fk=$model->ProgettoPrecedente->pr_diagnosi_fk;

        $model->presa_in_carico_data=$model->ProgettoPrecedente->FinePresunta;

        $model->tipo_diagnosi_A=$model->ProgettoPrecedente->tipo_diagnosi_A;

        $model->tipo_diagnosi_B=$model->ProgettoPrecedente->tipo_diagnosi_B;

        $model->setEquipe();

       


        // Uncomment the following line if AJAX validation is needed

        //$this->performAjaxValidation($model);


        if (isset($_POST['Proroga'])) {

            //bla bla bla

}

        }





        

        $this->render('create', array(

            'model' => $model

        ));

    }

    

l’update è identico, salvo per il model creato con il load model


public function loadModel($id) {

        $model = Proroga::model()->findByPk($id);

        if ($model === null)

            throw new CHttpException(404, 'The requested page does not exist.');

        return $model;

    }

Il model


class Proroga extends Progetto {

var $ProgettoPrecedente; 

function init(  ) {

        $this->is_ripresa_in_carico=0;

        $this->is_progetto=0;

        parent::init();

    }

}

provare a postare anche l’actionEdit


 public function actionUpdate($id) {

        $model = $this->loadModel($id);

        $paziente = $model->ccIdFk->paziente->shortName;

       

       //metto post_progetto per gestire l'arrivo dei dati. 

        if (isset($_POST['Progetto'])) {

       //blabla

                


        }

        $this->render('update', array(

            'model' => $model

        ));

    }

la mia view update


<?php

/**

 * update.php 

 * @version 1.0 28/02/2013

 * @package Progetti

 * @subpackage views/genereale/

 * @author Pasquale Pellicani 

 * @author Emanuele Ferrarini <emanuele.ferrarini@gmail.com>

 * 

 */

/* @var $this DefaultController */

/* @var $model Proroga */

?>

    <?php

$this->breadcrumbs = array(

    'Pazienti' => array('/pazienti'),

    $model->ccIdFk->paziente->anagrafica->nomeCompleto => array('/pazienti/generale/cartelle&id=' . $model->ccIdFk->pz_fk_id),

    'Cartella num ' . $model->ccIdFk->cc_codice=> array('/cartelleCliniche/&id='.$model->cc_id_fk)

);


$cartellaClinica = $model->ccIdFk->cc_codice;

$cognomePaziente = $model->ccIdFk->paziente->cognome;

$nomePaziente = $model->ccIdFk->paziente->nome;

?>


<h1>Aggiornamento proroga della Cart. clinica n. 

    <?php echo $cartellaClinica.' di '.$cognomePaziente.' '.$nomePaziente;?></h1>




<?php echo $this->renderPartial('viewPerForm',

        array(

            'model'=>$model

            )); ?>

e la view partial


<?php

/**

 * view.php 

 * @version 1.0 28/02/2013

 * @package progetti

 * @subpackage views/proroga

 * @author Pasquale Pellicani 

 * @author Emanuele Ferrarini <emanuele.ferrarini@gmail.com>

 * 

 */

/* @var $this ProgettoController */

/* @var $model Proroga */

isset($update) ? $update = 1 : $update = 0;

?>

<div class="form" style="padding:2em;">

    <?php

    CHtml::$afterRequiredLabel = '';

    $form = $this->beginWidget('CActiveForm', array(

        'id' => 'proroga-form',

        'enableAjaxValidation' => false,

    ));


    Yii::app()->getClientScript()->registerScript('tastoInvioDisabilitato', '

                $("form").keypress(function (evt) {

                //Deterime where our character code is coming from within the event

                var charCode = evt.charCode || evt.keyCode;

                if (charCode  == 13) { //Enter key\'s keycode

                return false;

                }

                });

    ', CClientScript::POS_READY);

    ?>

    <div class="block-content">

        <h1>Modifica Proroga</h1> 

        <?php $this->renderPartialPerTipologia('_panelform') ?>

        <?php $this->renderPartialPerTipologia('_fase_form', array('model' => $model, 'update' => $update, 'form' => $form)); ?>   

        <?php $this->renderPartialPerTipologia('_diagnosi_form', array('model' => $model, 'update' => $update, 'form' => $form)); ?>

        <?php $this->renderPartialPerTipologia('_trattamenti_form', array('model' => $model, 'update' => $update, 'form' => $form)); ?>

        <?php $this->renderPartialPerTipologia('_equipe_form', array('model' => $model, 'update' => $update, 'form' => $form)); ?>

        <?php $this->renderPartialPerTipologia('_test_form', array('model' => $model, 'update' => $update, 'form' => $form)); ?>

        <?php $this->renderPartialPerTipologia('_obiettivi_form', array('model' => $model, 'update' => $update, 'form' => $form)); ?>

        <?php $this->renderPartialPerTipologia('_note_form', array('model' => $model, 'update' => $update, 'form' => $form)); ?>

    </div>

    

    <!-- BUTTON -->   

    <div class="b" style="margin-bottom:2em;margin-top:2em;">

        <center><a name="end"></a>

<?php echo CHtml::submitButton('Aggiorna', array('class' => 'big-button')); ?>

        </center>    

    </div>

    <?php $this->endWidget(); ?>

</div>

<script>

    var div = $('.controls-buttons');

    var start_top = $(div).offset().top;

    var start_right = $(div).offset().left-150;

    $.event.add(window, "scroll", function() {

        var p = $(window).scrollTop();

        $(div).css('position', ((p) > start_top) ? 'fixed' : 'static');

        $(div).css('top', ((p) > start_top) ? '0px' : '');

        $(div).css('left', ((p) > start_top) ? start_right : '');

        $(div).css('z-index', 999990);

    });

</script>

Ho risolto :)

quando si estende un model bisogna anche sovrascrivere la funzione statica model




<?php


/**

 * RiabSystem Progetto  

 * @version 1.0 04/03/2013

 * @package progetti

 * @subpackage models

 * @author Pasquale Pellicani 

 * @author Emanuele Ferrarini <emanuele.ferrarini@gmail.com>

 */ 

class Proroga extends Progetto {

var $ProgettoPrecedente; 

function init(  ) {

        $this->is_ripresa_in_carico=0;

        $this->is_progetto=0;

        parent::init();

    }

   public static function model($className = __CLASS__) {

        return parent::model($className);

    }

}

Altra possibile soluzione, ma che porta a qualcosa di strano è questa:


public function loadModel($id) {

        $model = Proroga::model('Proroga')->findByPk($id);

        if ($model === null)

            throw new CHttpException(404, 'The requested page does not exist.');

        return $model;

    }

Dicevo che porta a qualcosa di strano perché in teoria se faccio


QualsiasiModelMiVengaInMente::model('Altromodel')->find...

mi caricherà ovviamente l’altroModel…

Il che è giusto per il verso del codice, ma mi sembra scorretto dal punto di vista di logica… sbaglio?

si sono d’accordo con te e ti confermo che per estendere il model ed ereditare i suoi metodi bisogna sovrascrivere la funzione statica model