假设我们有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是松散类型的,我可以将字符串传递给该方法,但是数据是否应该首先转换为整数?
答案 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)。我没有理由将这么小而易读的行专用于另一个类