Yii Framework Forum: [Risolto] I Model, Le Loro Estensioni E I Loro Nomi - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Risolto] I Model, Le Loro Estensioni E I Loro Nomi Rate Topic: -----

#1 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 20 March 2013 - 12:55 PM

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?
0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 20 March 2013 - 01:03 PM

Posteresti il metodo actionCreate?
0

#3 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 20 March 2013 - 01:10 PM

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();
    }
}

0

#4 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 329
  • Joined: 10-April 12

Posted 20 March 2013 - 05:23 PM

provare a postare anche l'actionEdit
0

#5 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 21 March 2013 - 03:51 AM

 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>

0

#6 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 21 March 2013 - 05:36 AM

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?
0

#7 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 329
  • Joined: 10-April 12

Posted 21 March 2013 - 07:36 PM

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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users