ZendFramework Zend_Form multiple input

WMix

герр M:)ller
Партнер клуба
есть форма

PHP:
class Form_Order extends Zend_Form{
  public function init(){
    $key = 0;
    $subform= new Zend_Form_SubForm();
    $subform->isArray(true);
    $subform->setElementsBelongTo("order_item");
    $subform->addElement( 'text', 'product_id', array(
        'label' 		=> 'Номер продукта',
        'isArray' 		=> true,
        'id'			=> "order_item-".$key."-product_id"
    ));
    $this->addSubForm($subform, "subform".$key);
  }
}
данный класс создаст элемент в таком виде
PHP:
<input type="text" value="" id="order_item-0-product_id" name="order_item[product_id][]">
с этим можно работать, но както немного неправильно выглядит _POST
хотелось бы чтоб элемент имел имя
НЕ order_item[product_id][]
А order_item[][product_id]

кто подскажет как это делается?
 

AmdY

Пью пиво
Команда форума
WMix
не, всё выглядит правильно, такую структуру сразу можно сохранять с релейшенами.
PHP:
[
    'order_item' => [
        ['protuct_id' => 1, 'title' = 'Protuct 1', 'price' => '5000'],
        ['protuct_id' => 3, 'title' = 'Protuct 2', 'price' => '5000'],
        ['protuct_id' => 99, 'title' = 'Protuct 99', 'price' => '5000'],
    ]
    //
]
 

WMix

герр M:)ller
Партнер клуба
чтот мне представляется это в виде
PHP:
'order_item' => [
    'protuct_id' => [ 1,2,3,....],
    'title' => ['Protuct 1', 'Protuct 2', ... ]
   ...
]
в зависимости от колличества

но у меня получилось если в SubForm вложить еще одну SubForm, а уже туда элемент 'isArray' => false
PHP:
			$subform= new Zend_Form_SubForm;

			$subform->isArray(true);
			$subform->setElementsBelongTo("order_items");
			
			$subSubForm = new Zend_Form_SubForm();
			$subSubForm->setElementsBelongTo($key);
			$subSubForm->addElement(...)

			$subform->addSubForm($subSubForm, "xxx".$key);
			$this->addSubForm($subform, "subform".$key);
дает нужное
PHP:
<input type="text" name="order_item[1][product_id]">

сижу смотрю и думаю, а на слишком я того...
 

AmdY

Пью пиво
Команда форума
WMix
лучше так не делать, для таких полей проще вызывать попапы с выбором. Посмотри как реализовано в бандле Sonata для Symfony 2, лучше сразу ищи видео на ютубе.
 

WMix

герр M:)ller
Партнер клуба
яб в жизнь так не извращался бы,. но задача, хотим мля все сразу менять.. еще и Ajaxom добавлять и записывать! сейчас пойду на ютюб
 

WMix

герр M:)ller
Партнер клуба
я понял идею "попапы с выбором", что ты предложил, но так уж получилось что выбора у меня нет..
по первому концепту, форма представляла из себя 4х вложение, те есть заказ, у заказа есть позиции, которые должны быть вложены в исходящие заказы, (в заказе исходящие заказы, в которых позиции) и к исходящим заказам еще счет с позициями...
PHP:
order : [
  out_order1: [ 
    orde_item1:[product_id, price...],
    orde_item2:[product_id, price...],
    invoice[
      attrs,
      items[....]
   ],
   out_order2: [...]
   ...
]
orde_item2
я 2 дня переубеждал что так делать ненужно, еще день интернет рыл изнываясь над своей участью.. в итоге решил что вложенность буду помнить начертаю масив элементов и отрендаю его во viewScript


кстати пока копался по нету нашел кучу интересных решений и хотя по какимто причинам я их опроверг, оставлю ссылки для тех кто решает подобные задачи

jqDynaForm jQuery Plugin очень интересный плагин, но хотелось валидацию на зенде использовать

Динамическое добавление групп элементов в формах Zend Framework с использованием ZendX_JQuery там парень конечно пропачил немножко в аррае, но идейка неплохая, ее и взял за основу, только вот перекрутил форму иначе, и
PHP:
if(isset($params['renderform'])) {
            $this->jquery->addJavascript('var ' . $js_var . ' = ' 
                                                . ZendX_JQuery::encodeJson($params['renderform']) . ';');
        }
хочу всеже сделать подзагрузкой на AJAX
 

WMix

герр M:)ller
Партнер клуба
удобно... но не зенд,... да и дело не в имени, я и так мог инпутов нагенерить, хочется пользоваться валидаторами, фильтрами, хочется остоваться в фрэймворке, нехочется патчить,...
а тут задачка такая, что поначалу волосы рвал от нехватки экспириенса в зенде...

но вот написав SubForm в SubForm и посмотрев на стандартный рэндинг нахожу даже логичен именно этот подход, все айтемсы это некая форма в которой каждый айтемс тоже форма ибо состоит из набора полей...

если кто считает что подход неправильный, обсужу с огромным удовольствием другие решения ( сама задача не обсуждается, созданна не мной, и является условием)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
удобно... но не зенд,... да и дело не в имени, я и так мог инпутов нагенерить, хочется пользоваться валидаторами, фильтрами,
Дык, пользуйся, кто мешает:
Server-side and client-side validation can be easily leveraged: rules added to prototype Container and its children are repeated as well.
А кстати зенд уже научился жаваскрипт-валидацию автоматически строить?
 

WMix

герр M:)ller
Партнер клуба
Дык, пользуйся, кто мешает:
подумать надо, вроде ниче не мешает, кроме что не зенд.. начнется потом, скручивание валидаторов и фильтров со сторонней библиотекой,.. но подумать да попробывать может и стоит,
хотя вот сейчас ненахожу ничего сложного и субформами писать... вот ток не нашел пока как имея элемент на руках вытащить его полное имя...
А кстати зенд уже научился жаваскрипт-валидацию автоматически строить?
типа Zend_Form_Decorator_JavascriptValidator такого
не пробывал еще если чесно...
 
Сверху