2011-03-16 106 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)); ?> 
相关问题