2011-03-16 156 views
1

我試圖想出一個標準的方法來在索引頁上爲同一模型創建多個表單。這裏有更多的細節。如何在CakePHP的單個頁面上創建多個表單?

我有一個活頁夾列表,每個活頁都顯示一個備忘錄。我希望備忘錄字段可以從索引頁面進行編輯。顯然,它不工作只是複製和粘貼視圖的edit_memo行動,就像這樣:

<?php echo $this->Form->create('Binder');?> 
    <fieldset> 
     <legend><?php __('Edit Memo'); ?></legend> 
    <?php 
     echo $this->Form->input('id'); 
     echo $this->Form->input('memo'); 
    ?> 
    </fieldset> 
<?php echo $this->Form->end(__('Submit', true));?> 

但是,這基本上就是我希望做。在上下文中,我只是循環索引操作中的活頁夾,備忘錄是模型的一部分。

我試圖改變$this->Form->create('Binder')以下幾點:

$this->Form->create(null,array(
    'id'=>"BinderEditMemo.$i", 
    'controller' => 'binders', 
    'action' => 'edit_memo', 
    'id' => $binder['Binder']['id'] 
)); 

,但沒有運氣。備忘錄字段仍然得到正規的ID,所以我想我可能也需要改變它。當我提交表單時,它會執行該操作,但它不會保存。僅供參考,我已將路由ID參數路由到行動。

我確定在索引循環中必須有一種標準方式來呈現多個表單。有什麼想法嗎?

回答

4

這不是太困難,但您必須少依賴Cake的FormHelper魔法。下面的工作(或者已經爲我工作在許多場合,至少):

<?php 
    $baseUrl = array('controller'=>'binders','action'=>'edit'); 
    foreach ($binders as $_binder) { 

    $url = $baseUrl; $url['id'] = $_binder['id']; 

    echo $this->Form->create('Binder',array('url'=>$url)); 
    echo $this->Form->input('Binder.id', array('type'=>'hidden','value'=>$_binder['id'])); 

    echo $this->Form->input('Binder.memo', array('value'=>$_binder['memo'])); 

    echo $this->Form->end(__('Submit',true)); 
    } 
?> 

我不完全相信你的數據結構,所以它上面會需要一些調整,但你應該明白。我不知道目的是通過創建假模型等服務。

+0

完美。最終代碼發佈爲答案。不知道這是否是在這裏做事的最佳方式。謝謝! – dbme 2011-03-17 03:11:50

+0

沒問題。隨意上船以及接受。 /無恥;) – 2011-03-17 03:32:17

0

丹尼爾,你是完全正確的!非常好。這是我結束的代碼。這是重要的一個主要原因。 HTML規範說ID必須是唯一的。因此,我在表格中添加了一個小數字,以防止出現問題。仍然有效。

<?php 
$baseUrl = array('controller'=>'binders','action'=>'edit_memo'); 
$url = $baseUrl; 
$url['id'] = $binder['Binder']['id']; 

echo $this->Form->create(null,array(
    'id'=>"BinderEditMemo-{$binder['Binder']['id']}", 
    'url'=>$url 
)); 
?> 
<fieldset> 
    <legend><?php __('Memo'); ?></legend> 
    <?php 
    echo $this->Form->input('Binder.id', array('id' => "BinderId-{$binder['Binder']['id']}", 'type'=>'hidden','value'=>$binder['Binder']['id'])); 
    echo $this->Form->input('Binder.memo', array('id' => "BinderMemo-{$binder['Binder']['id']}", 'value' => $binder['Binder']['memo'], 'label' => '',)); 
    ?> 
</fieldset>    
<?php echo $this->Form->end(__('Update Memo',true)); ?> 
相關問題