控制器是否应将其提取的数据转换为所需的数据类型?

时间:2013-11-09 10:37:15

标签: php oop

假设我们有Controllers\Cart,其方法为postAdd()。当您向http://www.site.com/cart/add发送POST请求时,将调用此方法。这是用于将产品添加到购物车的控制器方法,因此显然会发布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是松散类型的,我可以将字符串传递给该方法,但是数据是否应该首先转换为整数?

1 个答案:

答案 0 :(得分:0)

你有没有某种'Form'类来实现任何类型的验证任务?应验证由于不确定性而导致的任何传入外部数据。 您的示例可以像这样重写:

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)。我没有理由将这么小而易读的行专用于另一个类