【问题标题】:How to save multiple form in the same table like phpmyadmin如何在同一个表中保存多个表单,如 phpmyadmin
【发布时间】:2013-02-17 15:43:28
【问题描述】:

我正在使用 CakePHP 2.3 版

我一直在想,当您为 1 个表格输入多个表单时,如何像 phpmyadmin 那样保存循环表单。

假设我有一个包含 id、name 和 content 列的产品表。 为了保存我的数据,我用这 3 个输入乘以 3 制作了一个表格。 所以这给了我这样的东西:

<?php echo $this->Form->create('Product'); ?>

<!-- Form for product 1 -->
<?php echo $this->Form->input('name', array('label' => "Name")); ?>
<?php echo $this->Form->input('content', array('label' => "Content")); ?>
<?php echo $this->Form->input('id'); ?>

<!-- Form for product 2 -->
<?php echo $this->Form->input('name', array('label' => "Name")); ?>
<?php echo $this->Form->input('content', array('label' => "Content")); ?>
<?php echo $this->Form->input('id'); ?>

<!-- Form for product 3 -->
<?php echo $this->Form->input('name', array('label' => "Name")); ?>
<?php echo $this->Form->input('content', array('label' => "Content")); ?>
<?php echo $this->Form->input('id'); ?>

<?php echo $this->Form->end('done'); ?>

当然这是行不通的,我不知道如何完成。

有人可以告诉我它是如何工作的吗?

非常感谢您的帮助。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    input()方法进行如下调用:

    ...
    echo $this->Form->input('Product.0.name', array('label' => 'Name'));
    echo $this->Form->input('Product.0.content', array('label' => 'Content'));
    
    echo $this->Form->input('Product.1.name', array('label' => 'Name'));
    echo $this->Form->input('Product.1.content', array('label' => 'Content'));
    
    echo $this->Form->input('Product.2.name', array('label' => 'Name'));
    echo $this->Form->input('Product.2.content', array('label' => 'Content'));
    ...
    

    前面的代码应该输出以下表单元素

    <input type="text" id="Product0name" name="data[Product][0][name]">
    <input type="teaxtarea" id="Product0Content" name="data[Product][0][Content]">
    
    <input type="text" id="Product1name" name="data[Product][1][name]">
    <input type="teaxtarea" id="Product1Content" name="data[Product][1][Content]">
    
    <input type="text" id="Product2name" name="data[Product][2][name]">
    <input type="teaxtarea" id="Product2Content" name="data[Product][2][Content]">
    

    可以很容易地由您的控制器使用saveAll() 方法发布和保存。 还可以查看 CakePHP 文档:Field-naming-conventions

    【讨论】:

    • 这是最好的方法,虽然我认为在编辑现有产品时还应该有一个(隐藏的)产品 ID 输入
    • @Cris Sawfish:我看到你删除了 id 输入,但我显然需要它,因为每 3 个输入(包括 id)它都是一个新产品。如我错了请纠正我。不管怎样,谢谢你的建议,我今天要试试。致 thaJeztah:知道我已经有一个 id 列,我看不出有一个 product_id 列的隐藏输入。在那种情况下,它的目的是一样的,对吧?如果我想要相同的系统,但可以选择我想要的行数,就像 phpmyadmin 一样,该怎么办?
    • @JulianLivin'inChina 创建用于向数据库添加数据的表单时,您不必在表单中创建input 元素。 id 是根据表的模式自动创建的。因此,无论您一次保存多少项目,由于您遵循发布的约定,因此 cakephp 处理其余部分。正如 theJeztah 指出的那样,只有在编辑特定条目时,id 才需要 input
    • @Cris Sawfish:好的,我现在明白了,当时我遵循 cakePHP 约定很好。我为一个相关问题打开了一个新主题,如果你想检查一下,我真的很感激:stackoverflow.com/questions/14953015/…> 无论如何,谢谢你的帮助!
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 2020-04-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多