-1

假设我们有一个Controllers\Cartwhich 有一个方法postAdd()。当您将 POST 请求发送到http://www.site.com/cart/add. 这是将产品添加到购物车的控制器方法,因此显然productId会发布。

因为当我在控制器中执行此操作时,所有 POST 数据都将以字符串形式出现

public function postAdd() {
    $productId = $this->request->post('productId'); // It is of a 'string' type.

    // You would then probably do something like...
    $this->shoppingService->addToCart($productId);

    .........
}

的接口Services\Shopping将是

interface ShoppingInterface {

    /**
     * @param int $productId
     * @return bool
     */
    public function addToCart($productId);

}

由于 PHP 是松散类型的,我可以将字符串传递给该方法,但应该先将数据转换为整数吗?

4

1 回答 1

0

你没有某种“表单”类来实现任何类型的验证任务吗?任何由于不确定性质而传入的外部数据都应进行验证。您的示例可以这样重写:

public function postAdd()
{
    $form = $this->getProductForm()
        ->import($this->request->post())
        ->checkRules();

    if ($form->getErrors()) {
        return new FormErrorResponse($form);
    }

    $this->shoppingService->addToCart($form->getValue('productId'));
    ...
}

当然表单验证可以提取到私有方法(即checkLoginForm)。我认为没有理由将如此小巧易读的行专门用于另一个类

于 2013-11-14T14:13:44.807 回答