Php Silverstripe-动态生成表单存在多个问题

Php Silverstripe-动态生成表单存在多个问题,php,forms,silverstripe,Php,Forms,Silverstripe,我的页面上有多个表单,可以向购物车添加物品。在我向表单中添加了2个动态创建的下拉字段之前,这一切都很好。为了填充我更改的下拉列表 public function addToCart($title,$price){} 到 公共函数addToCart($ID){} 为了检查$ID是否返回正确的值,我将$ID放在一个textfield的值中 这是获取所有项目和表单的代码 public function getItems() { return Item::get(); } 模板中 <

我的页面上有多个表单,可以向购物车添加物品。在我向表单中添加了2个动态创建的下拉字段之前,这一切都很好。为了填充我更改的下拉列表

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

公共函数addToCart($ID){}

为了检查$ID是否返回正确的值,我将$ID放在一个textfield的值中

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

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

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

...
$Top.addToCart($ID)
...
如果我在函数中将$ID设置为1,那么一切都会像预期的那样工作,但是如果我使用标记返回的数据,我会收到三个错误

  • [注意]SS_HTTPRequest类的对象无法转换为int
  • [警告]mysqli::real_escape_string()要求参数1为字符串,对象为给定值
  • [警告]mysqli::real_escape_string()要求参数1为字符串,对象为给定值
  • 我认为错误1是因为
    $item=item::get()->byID($ID)和错误2+3是因为下拉列表

    但是为什么呢

    有人能给我指一下正确的方向吗? 这是我的密码

    提前谢谢你

    编辑

    错误1:我已经尝试将ID转换为整数
    $ID=(int)$ID但仍然是相同的错误

    [Notice] Object of class SS_HTTPRequest could not be converted to int
    
    很可能由需要数值的
    DataList::byID()
    引发

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

    在不知道由
    getItems()
    生成的
    SS\u列表是什么样子的情况下,我只是在猜测,但我敢打赌,如果您在模板中打印
    $ID
    ,它肯定不是一个数字

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

    或者在模板上下文中寻找类似的方法(提示我们在模板中的SS方法通常以大写字母开头),或者改编
    getItems()
    ,供您自己使用

    此外,还有一些提示:

    $colors = ColorObject::get()->filter(array('ItemID' => $ID));
    
    这不应该是:

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

    同:

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

    嗨,getItems()这是“return Item::get();”吗它只返回所有存储的项目。我已经尝试过像这样转换ID$ID=(int)$ID;但现在运气好了。还是一样的错误。有什么想法吗$颜色是正确的,因为我想为该项目存储所有颜色。
    $colorSource = $colors->map();