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();
}