Silverstripe 用于删除前端数据对象的表单赢得';行不通

Silverstripe 用于删除前端数据对象的表单赢得';行不通,silverstripe,Silverstripe,我创建了一个表单来从前端删除数据对象。问题是它不会删除 这是我的密码。有人能给我指出正确的方向吗 public function deleteFromCart($ID) { $fields = new FieldList( new HiddenField('ID', 'ID', $ID) ); $actions = new FieldList( new FormAction('doDeleteFromCart', 'löschen'

我创建了一个表单来从前端删除数据对象。问题是它不会删除

这是我的密码。有人能给我指出正确的方向吗

public function deleteFromCart($ID) { 
    $fields = new FieldList( 
        new HiddenField('ID', 'ID', $ID)
    );

    $actions = new FieldList( 
        new FormAction('doDeleteFromCart', 'löschen') 
    );

    return new Form($this, 'deleteFromCart', $fields, $actions); 
}

public function doDeleteFromCart($data) {
    $cart = CartItem::get()->byID($data['ID']);
    $cart->delete();

    return $this->redirectBack();
}
那是我的模板

    <% loop getCart %>
        <% if CartItems %>
            <% loop CartItems %>
                $Title - $Amount - $Price - $Sum - $Top.deleteFromCart($ID)
            <% end_loop %>
        <% else %>
            Keine Artikel im Warenkorb
        <% end_if %>
    <% end_loop %>

$Title-$Amount-$Price-$Sum-$Top.deleteFromCart($ID)
基恩·阿蒂克尔·伊姆·瓦伦科布
还有$this->redirectBack();不起作用。提交表单后,我在这里结束
home/deleteFromCart


提前感谢您

我建议使用一个调用操作的链接从购物车中删除项目,而不是使用表单。它更简单,可能出现的问题也更少

模板

<% loop $getCart %>
    <% if $CartItems %>
        <% loop $CartItems %>
            $Title - $Amount - $Price - $Sum - <a href="{$Top.Link}remove/{$ID}">Remove from cart</a>
        <% end_loop %>
    <% else %>
        Keine Artikel im Warenkorb
    <% end_if %>
<% end_loop %>

DodeletFromCart
中ID的值是多少?它是否返回一个
CartItem
?任何错误?模板中的“$Top.deleteFromCart($ID)”是否有效地将CartItem ID的值传递给deleteFromCart方法?我不确定您是否可以使用$ID之类的模板变量并将它们传递给函数。您可以通过检查隐藏字段的前端是否具有ID值来评估这一点。请提供更多详细信息。但有一个问题:整个事情是否都是以某种形式发生的?确保您没有将
包装在这一点上。在HTML中,您不能在
中包含
。当您有$ID参数要形成时,当它被处理时,您需要支持它为null的情况,即deleteFromCart($ID=null)。我完全同意3dgoo,将以完全相同的方式解决它。但是,有一个部分缺失了:它应该重定向回去或者是一个ajax调用。是的,这确实更好,但它也不会删除cartim。最后,这个函数还调用$cart->delete(),就像我的一样。但我觉得这不管用?好吧,这是一种奇怪的行为。我运行了一个dev/build(这不是我尝试完成这项工作以来的第一次),现在我可以使用这两个函数删除项目,但是如果我不想向购物车添加新项目,我会收到一个错误(不是在dev/build之前)。但这是另一个话题
private $allowed_actions = array(
    'remove'
);

public function remove() {
    $cartItemID = $this->request->param('ID');

    if ($cartItemID && $cart = CartItem::get()->byID($cartItemID)) {
        $cart->delete();
    }

    return array();
}