2009-10-09 14 views
12

Uso CakePHP:CakePHP selezionare il valore predefinito in selezione ingresso

ho una relazione molti-a-uno, facciamo finta che sia molte foglie di alberi. Ovviamente, ho infornato un modulo per aggiungere una foglia ad un albero, e puoi specificare quale albero è con una casella a discesa (tag) creata dall'assistente del modulo.

L'unica cosa è, la casella di selezione sempre imposta Albero # 1, ma vorrei che per difetto per l'Albero è stato aggiunto alla:

Ad esempio, la chiamata example.com/leaf/add/5 avrebbe portato l'interfaccia per aggiungere un nuovo Leaf to Tree # 5. La casella di riepilogo a discesa per Leaf.tree_id avrebbe come impostazione predefinita "Albero 5", anziché "Albero 1" al momento impostata per impostazione predefinita.

Cosa devo inserire nel mio controller Leaf e Leaf view/add.ctp per fare ciò?

risposta

19

Non utilizzare mai select() o text() o radio() ecc .; è una pratica terribile. Si dovrebbe usare input():

$form->input('tree_id', array('options' => $trees)); 

Poi nel controllore:

$this->data['Leaf']['tree_id'] = $id; 
+29

Non sono sicuro della "pratica terribile" – SeanDowney

+2

Puoi spiegarlo meglio? Dove è definita la variabile '$ tree'? '$ Options' non dovrebbe essere un array con chiave il tipo di opzione? – mgPePe

+3

Crede a quello che dice Miles, è una pratica TERRIBILE, ho passato 2:00 ore della mia vita cercando di impostare l'attributo "after" di Cake con $ this-> Form-> Select() e non lo fa funziona bene Per risparmiare tempo prezioso usa $ this-> Form-> input come Select. – BruneX

1

Supponendo che si sta utilizzando modulo helper per generare il modulo:

select(string $fieldName, array $options, mixed $selected, array $attributes, boolean $showEmpty) 

Impostare il terzo parametro per impostare l'opzione selezionata.

+0

Hey, ho il seguente codice: $ options = array ('1' => 'opt1', '2' => 'opt2', '3' => 'OPT3'); echo $ form-> select ('Fieldname', $ options, ???, Array(), false); qual è il formato per il 3 ° parametro per impostare l'elemento selezionato? Non riesco a farlo bene. – cardflopper

+0

dovrebbe essere il valore dell'opzione selezionata –

+0

In quale versione di CakePHP è presente - Non riesco a trovare la documentazione per questo in 1.1, 1.2 o 1.3? – icc97

8

il terzo parametro dovrebbe essere come array ('selezionato' => valore)

+0

Questo è solo se si desidera che quel valore sia SEMPRE selezionato – dfmiller

48

In CakePHP 1.3, utilizzare 'default'=>value per selezionare il valore predefinito in un input di selezione:

$this->Form->input('Leaf.id', array('type'=>'select', 'label'=>'Leaf', 'options'=>$leafs, 'default'=>'3')); 
+9

Perché questo non è contrassegnato come risposta? Questo è quello corretto (l'altro potrebbe essere un suggerimento, ma questa è la vera risposta alla domanda!) –

+0

Prendi in considerazione il tempo di latenza dovuto alla cache di cakephp ... –

+3

Questo è corretto anche nella torta 1.2. Per evitare di impazzire, non solo aggiornare la pagina per vedere se l'impostazione predefinita funziona (rimarrà con il quale viene sempre selezionato un valore), è necessario tornare indietro di una pagina e fare nuovamente clic sulla pagina (o andare avanti). clicca nella barra degli indirizzi e premi invio) – icc97

0

Per rendere un testo predefinito in una casella di selezione, utilizzare il metodo $form->select(). Ecco come lo fai.

$options = array('m'=>'Male','f'=>'Female','n'=>'neutral'); 

$form->select('Model.name',$options,'f'); 

Il codice di cui sopra selezionerà Female nella casella di riepilogo per impostazione predefinita.

Tenere cottura ...

0
FormHelper::select(string $fieldName, array $options, 
array $attributes) 

$attributes['value'] per impostare quale valore deve essere selezionata di default

<?php echo $this->Form->select('status', $list, array(
    'empty' => false, 
    'value' => 1) 
); ?> 
7
$this->Form->input('Leaf.id', array(
'type'=>'select', 
'label'=>'Leaf', 
'options'=>$leafs, 
'value'=>2 
)); 

Questo selezionerà valore di posizione di indice secondo di default dalla lista di opzione nel $ foglie .

0

Se si utilizza CakePHP versione 3.0 e successive, è possibile aggiungere il valore predefinito in Seleziona input utilizzando l'attributo vuoto come indicato nell'esempio seguente.

echo $this->Form->input('category_id', ['options'=>$categories,'empty'=>'Choose']);