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 ?
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
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,
));
}
Ciao sensorario, tu intendi sfruttare una proprietà del model ($model->documento_precedente)? Piuttosto che una variabile ‘creata al volo’ ? Ho capito bene ?
Quello che intendevo dire, è che possiamo manipolare il model direttamente dentro al controller, per vedere già popolati i campi all’interno della form.