Hunchentoot处理复选框Post请求

Hunchentoot处理复选框Post请求,post,lisp,common-lisp,hunchentoot,cl-who,Post,Lisp,Common Lisp,Hunchentoot,Cl Who,我正在Cl who、Hunchentoot和Common Lisp中开发一个web应用程序,需要处理客户订单。因为他们显然可以订购多个商品,所以我认为复选框最有意义。然而,问题是,当我定义一个easy处理程序时,如果有一系列具有相同名称和不同值的复选框,它不会像PHP中的数组那样接收结果数组。相反,它将变量视为字符串,因此我无法遍历选中的每个框。以下是我的代码片段: (:input :type "checkbox" :name "food[]" :value "cheese balls") (:

我正在Cl who、Hunchentoot和Common Lisp中开发一个web应用程序,需要处理客户订单。因为他们显然可以订购多个商品,所以我认为复选框最有意义。然而,问题是,当我定义一个easy处理程序时,如果有一系列具有相同名称和不同值的复选框,它不会像PHP中的数组那样接收结果数组。相反,它将变量视为字符串,因此我无法遍历选中的每个框。以下是我的代码片段:

(:input :type "checkbox" :name "food[]" :value "cheese balls")
(:input :type "checkbox" :name "food[]" :value "fries")
(:input :type "checkbox" :name "food[]" :value "hamburger")
这是我设置的处理程序(可能我需要在这里使用循环宏?)

(define-easy-handler (process-order :uri "/process-order") 
    (customer-name customer-address customer-city customer-phone order-type food[])
       (standard-page (:title "order results"
                       :href "file.css")
           (:h1 (if food[]
                (dolist (x food[])
                   (:li (fmt "We see that you want ~A~%" x)))))))
这只是有人可以检查的三个潜在输入。所以让我们假设一个客户检查了所有三个。。。只有奶酪球会返回,因为Lisp将名称“food[]”视为单个字符串。我的意思是,在PHP中,name的变量(“food[])将被当作数组处理。因此,在HTML和PHP中,它看起来像这样:

<input type="checkbox" name="food[]" value="cheese balls" class="check"/>
<input type="checkbox" name="food[]" value="fries" class="check"/>
<input type="checkbox" name="food[]" value="hamburger" class="check"/>

然而,目前还不清楚如何使用CLWHO和Hunchentoot在CommonLisp中实现类似的功能。我唯一能想到的另一种选择是将大约30个参数传递给easy处理程序,但这似乎是解决此问题最不有效的方法。我知道还有一个CL表单处理库,但我希望避免走这条路,尽管如果这是唯一可能的解决方案,我会这样做。给每个复选框起一个不同的名字似乎是解决这个问题最糟糕的方法

进一步阅读文档后,您可以更改easy handler希望接收的参数类型。一旦在参数定义中看到它是一个列表,它就会将其视为一个列表。我只是将我的食物参数更改为:

(food[] :parameter-type 'list)

它将其视为一个列表,并从我的复选框中检索多个结果。

括号中的
[]
看起来真的,为什么?我在原型设计时使用了括号,因为我正在与一些PHP人员合作。在PHP中,当您使用复选框时,它表示和数组,因此它帮助我们在PHP中的post请求和Hunchentoot中的post请求之间建立了心理联系,以及我们如何处理它。
(food[] :parameter-type 'list)