Symfony 1.4中的动态表单字段

时间:2010-10-28 20:38:31

标签: php symfony-1.4 symfony-forms

我正在开展一个电子商务项目,我被卡车更新了。在这里,我必须使用当前购物车的内容呈现一个表单,输入字段包含当前数量。

我检查了文档和论坛,但我没有找到任何有用的东西。问题是我不能在我的表单类中声明确切的表单字段,因为我不知道会有多少字段。我试过这个:

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

所以这不是正确的方法。我尝试使用没有任何表单类(和验证器)的原始字段,但发生了一些非常奇怪的事情,而不是获得$ _POST值我得到404错误,因为当我提交表单时它不会触发:

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

如果删除了该要求,则会运行cart / update,但我在请求对象中没有$ _POST数据。你有什么想法吗?

1 个答案:

答案 0 :(得分:4)

这些将有助于您动态添加表单字段并使用这些字段的验证: