0

我有以下功能:

 public function make_order($id = null){
        if($this->request->is('post')){
            if(isset($id)){
                $single_product = $this->Product->find('first', array('Product.id' => $id));
                $this->placeOrder($single_product);
            }else{
                $product_array = $_SESSION['basket'];
                foreach($product_array as $product){
                    $this->placeOrder($product);
                }
            }

        }
}
private function placeOrder($product){
    $order_array = array();

    $order_array['Order']['Product_id'] = $product['Product']['id'];
    $order_array['Order']['lejer_id'] = $this->userid;
    $order_array['Order']['udlejer_id'] = $product['users_id'];
    $this->Order->add($order_array);
}

现在这两个函数没有“连接”到一个视图,但我仍然需要从另一个视图中调用它们

为此,我尝试了以下方法:

<?php echo $this->Html->link(__('Bestil'), array('action' => 'make_order')); ?>

然而,这会引发一个错误,说它找不到匹配的视图make_order并且有充分的理由(我没有创建一个并且我不打算创建一个)

我的问题是如何从我的视图中调用和执行这个函数?

4

2 回答 2

2

make_order函数结束时,您需要:

a) 指定要渲染的视图文件,或 b) 重定向到不同的控制器和/或动作,它确实有要渲染的视图文件。

a) 看起来像这样:

$this->render('some_other_view_file');

b) 可能看起来像这样(注意:设置 flash 消息是可选的)

$this->Session->setFlash(__('Your order was placed'));
$this->redirect(array('controller' => 'some_controller', 'action' => 'some_action'));
于 2013-09-29T22:46:21.080 回答
1

$this->autoRender = false;您可以通过设置控制器的操作来关闭自动渲染(make_order()在这种情况下)。这样你就不需要视图文件,你可以输出任何你需要的东西。

问题是屏幕上不会呈现任何内容。因此,我的建议是让您的“链接”通过 AJAX 简单地调用一个控制器::操作。如果这在您的情况下是不可能的,那么您将不得不在您的make_order()方法中渲染视图,或者重定向到将渲染视图的操作。

于 2013-09-29T22:53:13.933 回答