1

私は e コマース プロジェクトに取り組んでいますが、カートの更新で行き詰まりました。ここでは、現在のカートの内容を使用して、現在の数量を含む入力フィールドを含むフォームを提示する必要があります。

ドキュメントとフォーラムをチェックしましたが、役に立つものは何も見つかりませんでした。問題は、フォーム クラスで正確なフォーム フィールドを宣言できないことです。これは、そこにいくつのフィールドがあるかわからないためです。私はこれを試しました:

class CartForm extends sfForm {
  public function configure()
  {
    $cart = sfContext::getInstance()->getUser()->getShoppingCart();
    foreach ($cart->getItems() as $item) {
      $widgetName = $item->getId().'_quantity';
      $this->widgetSchema[$widgetName] = new sfWidgetFormInput(
        array(),
        array(
            'class' => 'quantity-input',
            'id'    => null,
            'name'  => $widgetName
        )
      );
      $this->widgetSchema->setDefault($widgetName, $item->getQuantity());
      $this->validatorSchema[$widgetName] = new sfValidatorInteger(array(
        'required' => true,
        'min'      => 1
      ),
      array());
    }
    unset($cart);
    $this->getWidgetSchema()->getFormFormatter()->setRowFormat('%field%%error%%hidden_fields%');
  }
}

しかし、いくつかのエラーが発生しました:

Fatal error: Cannot use object of type sfShoppingCart as array in /home/sfprojects/mdmall/lib/vendor/symfony/lib/form/sfForm.class.php on line 784

したがって、これは正しい方法ではありません。フォーム クラス (およびバリデーター) なしで raw フィールドを使用しようとしましたが、フォームを送信してもこれがトリガーされないため、$_POST 値を取得する代わりに、非常に奇妙なことが起こります。

cart_update:
  url:    /cart/update.:sf_format
  class:  sfRequestRoute
  param:  { module: cart, action: update, sf_format: html }
  requirements: { sf_method: post }

要件を削除すると、カート/更新が実行されますが、リクエスト オブジェクトに $_POST データがありません。あなたはなにか考えはありますか?

4

1 に答える 1

4

これらは、フォーム フィールドを動的に追加し、それらのフィールドの検証を行う際に役立ちます。

于 2010-10-28T20:46:26.077 に答える