Distinguere isNew or not

Salve a tutti, ho una procedura x inserire dei documenti e dal 2^ in poi non vorrei riproporre il campo titolo (che rimane al 99% sempre tale) dunque ho pensato bene di ricavare, nella actionCreate, l’id del documento precedente a quello che si stà per creare e passarlo alla view, per mostrare la input già con del contenuto.

Funziona, ma quando richiamo la actionUpdate (giustamente) non conosce la variabile $idDelDocumentoPrecedente e mi restituisce un [color="#FF8C00"]‘Php Notice> Undefined variable: idDelDocumentoPrecedente’[/color]

dovrei aggiungere la condizione se isNewRecord o qualcosa di simile ? Esiste un metodo un pò più pulito ? :rolleyes:

grazie

immagino che hai modificato la view _form.php che viene richiamata sia dalla create che dalla update… separale… crea un _form_update senza quella variabile che serve solo nella create

Si è lei, la view _form.php avevo il sensore che potesse esserci qualcosa di + ‘pulito’ perchè se un domani avrò bisogno di una modifica in questo modo sarò costretto a farne due anzichè una sola :(

grazie ;)

Oppure dai un valore di default “null” a quella variabile. In caso di create, sarà null. In caso di update, sarà inizializzata. In ogni caso la differenza non è tanto nella form, quando nel controller. Quindi è li che andrei a modificare le cose. Vi ricordo che i form sono costruiti sul model, quindi ti basta modificare il model quando ti trovi nell’update.

Questo è il codice normale di una create:




    public function actionCreate()

    {

        $model = new Documento;


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

            $model->attributes = $_POST['Documento'];

            if ($model->save()) {

                $this->redirect(array('view', 'id' => $model->id));

            }

        }


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

            'model' => $model,

        ));

    }



Questo potrebbe essere quello di cui tu hai bisogno. In questo modo non serve creare nessun tipo di variabile in più. Il model verrà passato alla vista e l’id del documento riconosciuto.




    public function actionCreate($idDocumentoPrecedente = null)

    {

        $model = new Documento;


        $model->documento_precedente = $idDocumentoPrecedente === null

            ? null

            : $idDocumentoPrecedente;


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

            $model->attributes = $_POST['Documento'];

            if ($model->save()) {

                $this->redirect(array('view', 'id' => $model->id));

            }

        }


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

            'model' => $model,

        ));

    }



se posti il codice di model/view/controller capiamo meglio

@sensoriario

è inutile la condizione, si può fare direttamente


$model->documento_precedente = $idDocumentoPrecedente

e poi credo che anziché nella actionCreate quel codice vada nella actionUpdate, dove ha il problema

Ciao sensorario, tu intendi sfruttare una proprietà del model ($model->documento_precedente)? Piuttosto che una variabile ‘creata al volo’ ? Ho capito bene ?

tnx ;)

A prescindere che si tratti di una create o di una update, ad un certo punto noi passiamo un $model:




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

            'model' => $model,

        ));



Quello che intendevo dire, è che possiamo manipolare il model direttamente dentro al controller, per vedere già popolati i campi all’interno della form.

Giustissimo :) aggiungo la proprietà ProprietaDelModelPrecedente al model… e la stampo direttamente nella view!

grazie a tutti ;)