Silverstripe - 动态生成表单的多个问题

时间:2014-03-19 18:46:27

标签: php forms silverstripe

我的页面上有多个表单,可以将商品添加到购物车中。这很有效,直到我向表单添加了2个动态创建的Dropdownfields。为了填补我改变的下拉列表

public function addToCart($title, $price) {}

public function addToCart($ID) {}

检查$ ID是否返回正确的值,我将$ ID推送到文本字段的值。

这是获取所有项目和表格的代码

public function getItems() {
   return Item::get();
}

在模板中

    <% loop getItems %>
       ...
        $Top.addToCart($ID)
       ...
    <% end_loop %>

如果我在我的函数中将$ ID设置为1,那么一切都按预期工作,但如果我使用我的标记返回的数据,则会收到三个错误。

  1. [注意]类SS_HTTPRequest的对象无法转换为int
  2. [警告] mysqli :: real_escape_string()期望参数1为字符串,给定对象
  3. [警告] mysqli :: real_escape_string()期望参数1为字符串,给定对象
  4. 我认为错误1是因为$item = Item::get()->byID($ID);而错误2 + 3是因为下拉。

    但为什么??

    有人可以指出我正确的方向吗? 这是我的代码http://pastie.org/private/vnepfjt0pi5qehmoyqv1ag

    提前谢谢!

    修改

    错误1:我已尝试将ID转换为Integre $ID = (int)$ID;,但仍然存在相同的错误

1 个答案:

答案 0 :(得分:0)

[Notice] Object of class SS_HTTPRequest could not be converted to int

DataList::byID()可能会抛出期待数值。

这意味着您认为来自模板中$ID的数字不是数字。

我不知道SS_List生成的getItems()看起来是什么,我只是在猜测,但如果您在模板中打印$ID,我会打赌,它不会是一个数字。

也许getItems()应该是从用户响应生成的SS_HTTPRequest对象中获取数据,而你实际上是在错误的上下文中使用它?

要么在模板上下文中使用类似的方法(模板中的提示SS方法通常以大写字母开头),要么getItems()适合自己使用。

另外,只是一些提示:

$colors = ColorObject::get()->filter(array('ItemID' => $ID));

不应该是:

$colors = ColorObject::get()->filter(array('ID' => $ID));

$colorSource = $colors->map('ID', 'Title’);

与:

相同
$colorSource = $colors->map();
祝你好运,Russ