ottenere valore all'interno del form

CIao a tutti,

rieccomi dopo pochissimo tempo con una nuova domanda (stavolta veloce, credo).

Dato questo codice nel controller:

$form->populate(array('role' => $role));

questo codice nel model MioForm.php genera correttamente un campo hidden con l'attributo value = 'mioruolo'

$roleField = new Zend_Form_Element_Hidden('role');

Ma se io volessi, all'interno del model, fare uno switch sulla variabile role passata dal controller, come posso ottenere il valore della suddetta?

Nessuna di queste due istruzioni funziona (mi restituiscono una stringa vuota):

$this->getValue('role');

$roleField->getValue();

 :bye:

inviato 7 anni fa
Sifro
X 0 X

$role ha il valore del "mioruolo"?

Ma se io volessi, all'interno del model, fare uno switch sulla variabile role passata dal controller, come posso ottenere il valore della suddetta?

Cosa vuoi fare esattamente?

(In genere non si dovrebbe creare un model per il form, si crea appunto una nuova classe form, queste classi le puoi inserire sotto application/forms)

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X
$role ha il valore del "mioruolo"?

si, scusa, mi ero dimenticato di specificarlo.

Cosa vuoi fare esattamente?

(In genere non si dovrebbe creare un model per il form, si crea appunto una nuova classe form, queste classi le puoi inserire sotto application/forms)

anche qui mi son spiegato male: in effetti è quello che ho fatto io, ho creato una classe MioForm (poi l'ho inserita in models, quindi per questo lo considero un modello).

Ad ogni modo, quello che devo fare è poter scegliere, all'interno di quella classe MioForm, se mostrare un determinato campo a seconda che questo parametro che passo dal controller sia pippo o pluto o paperino....

Questo per evitare di creare 25 classi che differiscono l'una dall'altra solo per un campo.

Ciao!

risposto 7 anni fa
Sifro
X 0 X

Ad ogni modo, quello che devo fare è poter scegliere, all'interno di quella classe MioForm, se mostrare un determinato campo a seconda che questo parametro che passo dal controller sia pippo o pluto o paperino....

Questo per evitare di creare 25 classi che differiscono l'una dall'altra solo per un campo.

Io continuo a non capire la logica che dovrebbe starci dietro...scusami... :-[

Cioè se vuoi impostare un campo del form come pippo il form dovrebbe apparire come?

Se invece vuoi impostare un campo del form come pluto dovrebbe apparire come?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

no, non mi hai capito, faccio un esempio piu concreto:

Dal controller passo al form la variabile $mestiere.

Dal form faccio uno switch del tipo:

switch($mestiere) {

case 'muratore':

  // aggiungi i campi dimensione preferita della cazzuola, numero di palazzi costruiti, marca di carta vetrata preferita

break;

case 'pittore':

  // aggiungi i campi colore preferito, dimensione tela, stile artistico

break;

case 'programmatore':

  // sistema operativo, linguaggio

}

Questo non riesco a farlo.

Riesco solo a creare un

$campo = new Zend_Form_Element_*qualcosa*('mestiere')

che ha come attributo html 'value' il contenuto della variabile mestiere passata attraverso il metodo populate() nel controller.

Più chiaro?

 :bye:

risposto 7 anni fa
Sifro
X 0 X

Si ora si  O0

Tu praticamente hai necessità di avere form differenti a seconda del tipo di "mestiere".

Sinceramente al posto tuo non farei in questo modo:

- mi creo un oggetto derivato da zend_form per creare i miei form, che devono essere differenti a seconda del tipo di mestiere che si fa.

- creo il costruttore per questo mio oggetto il quale a seconda del mestiere che gli passi si arrangerà a caricare il form specifico.

In questo modo non crei un form unico in cui cambi solamente un valore come hai detto:

$campo = new Zend_Form_Element_*qualcosa*('mestiere')

Faresti una cosa del genere:

$form = new Myform_Mestiere('mestiere');

Ok?

Il tuo oggetto potrebbe iniziare così tipo:

<?php
 class Myform_Mestiere extends Zend_Form
 {
     public function __construct($mestiere)
     {
     case $mestiere
     ecc. ecc.
     }
}

Ovviamente devi correggere la sintassi e adattare il tutto a come vuoi costruire la cosa.

Spero di essere stato chiaro  :)

risposto 7 anni fa
Mario Santagiuliana
X 0 X

chiarissimo e soprattutto grazie per la soluzione efficace!

Era la più semplice ed ovvia eppure non mi è neanche passata per la testa :)

 :bye:

risposto 7 anni fa
Sifro
X 0 X

Ho avuto a che fare con un problema più o meno simile: abilitare o meno un elemento del form in base alla action in cui veniva istanziato.

Ho quindi definito il form così:

class Application_Form_Utente extends Zend_Form
{
    public function init()
    {
        /* Form Elements & Other Definitions Here ... */
    }

   public function __construct($readOnly)
   {
      parent::__construct($options);        
      
      [..]

      $ute_codice ->setLabel('Codice Utente: *')
              ->setRequired(true)
              ->addFilter('StripTags')
              ->addFilter('StringTrim')
              ->addValidator('NotEmpty');

              if ($readOnly == 'true') {
                 $ute_codice ->setAttrib('readonly','true');
              }

Dove il valore di $readOnly mi dice se il campo dev'essere settato a sola lettura o no.

A questo punto mi chiedo se la riga parent::__construct($options);  ha ancora senso di esistere, visto che era messa di default.

Grazie

risposto 6 anni fa
uastasi
X 0 X

Dipende, se l'oggetto padre per essere inizializzato ha bisogno di alcune variabili allora è necessario richiamare in modo corretto il costruttore nella classe figlia. Il tuo codice appunto riporta la variabile $options.

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda