1

私はcakePHPにかなり慣れていないので、この問題に数日間悩まされています。[マイ製品]インデックスビューには、在庫にある製品のリストが表示され、[チェックアウト/追加]ビューを指すすべての製品に対する「チェックアウト」アクションが含まれています。問題は、チェックアウトする必要のある製品のproduct_idがチェックアウトの追加ページに渡されず、これを実現する方法がわからないことです。誰かが何か提案があれば、私は本当にいくつかの助けを使うことができます。

これが私のCheckoutController追加アクションです:

    public function add() {
    if ($this->request->is('post')) {
        $this->Checkout->create();
        if ($this->Checkout->save($this->request->data)) {
            $this->Session->setFlash(__('The checkout has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The checkout could not be saved. Please, try again.'));
        }
    }
    $products = $this->Checkout->Product->find('list');
    $users = $this->Checkout->User->find('list');
    $this->set(compact('products', 'users'));
}

チェックアウトビューの追加

<?php echo $this->Form->create('Checkout');?>
<fieldset>
    <legend><?php echo __('Add Checkout'); ?></legend>
<?php
    echo $this->Form->input('product_id');
    echo $this->Form->input('start_time');
    echo $this->Form->input('end_time');
    echo $this->Form->input('user_id');
    echo $this->Form->input('description');
?>
</fieldset>

製品インデックスページからのリンク

    <?php echo $this->Html->link(__('Checkout'), array('controller' => 'Checkouts','action' => 'add', $product['Product']['id'])); ?>
4

2 に答える 2

0

製品インデックスページのリンクから、

public function add()

読む必要があります

public function add($product_id)

さらに$product_id、をビューに設定し、入力ボックスに入力する必要がありますecho $this->Form->input('product_id', array('value'=>$product_id));

于 2013-02-26T22:59:27.843 に答える
0

Cakeは、アクションの最初の引数としてproduct_idを渡します。デフォルトのCake'Routes'はこのURLと一致します。

/mycontroller/myaction/param1/param2/param3

このアクションに:

MycontrollerController::myaction(param1, param2, param3)

add()アクションに引数を追加し、フォームが投稿されていない場合は「リクエスト」に追加することで、この値をフォームに渡すことができます。このような;

public function add($productId = null) {
    if ($this->request->is('post')) {
        $this->Checkout->create();
        if ($this->Checkout->save($this->request->data)) {
            $this->Session->setFlash(__('The checkout has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The checkout could not be saved. Please, try again.'));
        }
    } else {
        $this->request->data['Checkout']['product_id'] = $productId;
    }

    $products = $this->Checkout->Product->find('list');
    $users = $this->Checkout->User->find('list');
    $this->set(compact('products', 'users'));
}

これにより、product_idドロップダウンの「値」が自動的に伝播されます

于 2013-02-26T23:08:22.500 に答える