2010-10-28 5 views
1

Я работаю над проектом электронной коммерции, и я застрял в обновлении корзины. Здесь я должен представить форму, используя содержимое текущей корзины, с полями ввода, содержащими текущие величины.Динамические поля формы в Symfony 1.4

Я проверил документацию и форумы, но я не нашел ничего полезного. Проблема в том, что я не могу объявить точные поля формы в классе формы, потому что я не знаю, сколько полей будет там. Я попытался это:

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 } 

Если я уберу требование, прохождение корзины/обновления выполняется, но у меня нет данных $ _POST в объекте запроса. У тебя есть идеи?

ответ