0

我想编写一些我认为相当简单的代码:在字段上接受用户输入,然后使用该值更新记录数组。由于我对 Request 对象的了解很少,我想我正在跌跌撞撞。我的索引视图中有一个表单

<div class="<?php echo $this->request->params['action']; ?>">

<?php
echo $this->Form->create('Invoice', array('action' => 'edit'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->input('purchaseOrderNumber');
echo $this->Form->submit('Update Invoices', array('div' => false, 'name' => 'submit'));
?> 

<table>
    <tr>
        <th>Invoice Number</th>
        <th>Customer Name</th>
        <th>Invoice Date</th>
    </tr>

    <!-- Here is where we loop through our $invoices array, printing out invoice info -->

    <?php foreach ($invoices as $invoice): ?>
        <tr>        
            <td>
                <?php echo $this->Html->link($invoice['Invoice']['invoiceNumber'], array('action' => 'edit', $invoice['Invoice']['id'])); ?>
            </td>
            <td>
                <?php echo $invoice['Invoice']['customerName']; ?>
            </td>        
            <td>
                <?php echo $invoice['Invoice']['invoiceDate']; ?>
            </td>          
        </tr>
        <?php
    endforeach;
    echo $this->Form->end();
    ?>

</table>
</div>

很简单。我想从purchaseOrderNumber中获取值并使用它来更新在后续 foreach() 中返回的数据集中的记录。尽管我尽了最大的努力寻找线索,但我还没有发现我是如何做到这一点的。我的猜测是,对于更有经验的开发人员来说,这太明显了,以至于他们发现没有必要写它。

任何帮助,将不胜感激。如果您需要更多解释,请询问。

4

1 回答 1

1

我不确定您对 Request 对象不了解什么,但这是您可以做的。

提交发票表单后,表单数据对您的edit方法可用。您可以在InvoicesController$this->data中使用(只读)或$this->request->data(可能会更改)来执行更新查询。

您的表单返回的数据$this->data具有以下结构:

array(
    'submit' => 'Update Invoices',
    'Invoice' => array(
        'id' => '1',
        'purchaseOrderNumber' => '3'
    )
)

显然,您不需要提交值,但您可以使用其他数据来检索正确的发票id1使用purchaseOrderNumber3更新它。

理论上的更新将像这样构建:

$this->Invoice->save($this->data['Invoice']);

这与此类似,更逐字,等效:

$update = array(
  'Invoice' => array(
    'id' => 1,
    'purchaseOrderNumber' => 3
  )
);

$this->Invoice->save($update);

通过提供id其他数据,Cake“知道”使用 UPDATE 而不是执行常规 INSERT。

上面的代码来自内存,可能包含错误,但它应该为您指明正确的方向,希望如此。

于 2012-04-12T09:51:27.063 回答