-1

Controllers\Cartmethodを持つ があるとしましょう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 に答える