ZendFramework Zend_Form multiple input

Тема в разделе "Zend Framework", создана пользователем WMix, 28 сен 2012.

  1. WMix

    WMix герр M:)ller

    Сообщения:
    3.011
    Адрес:
    Germany
    есть форма

    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]

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

    AmdY первый после Духовность™ Команда форума

    Сообщения:
    5.574
    Адрес:
    Belarus, Minsk
    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'],
        ]
        
    //
    ]
  3. WMix

    WMix герр M:)ller

    Сообщения:
    3.011
    Адрес:
    Germany
    чтот мне представляется это в виде
    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]">

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

    AmdY первый после Духовность™ Команда форума

    Сообщения:
    5.574
    Адрес:
    Belarus, Minsk
    WMix
    лучше так не делать, для таких полей проще вызывать попапы с выбором. Посмотри как реализовано в бандле Sonata для Symfony 2, лучше сразу ищи видео на ютубе.
  5. WMix

    WMix герр M:)ller

    Сообщения:
    3.011
    Адрес:
    Germany
    яб в жизнь так не извращался бы,. но задача, хотим мля все сразу менять.. еще и Ajaxom добавлять и записывать! сейчас пойду на ютюб
  6. WMix

    WMix герр M:)ller

    Сообщения:
    3.011
    Адрес:
    Germany
    я понял идею "попапы с выбором", что ты предложил, но так уж получилось что выбора у меня нет..
    по первому концепту, форма представляла из себя 4х вложение, те есть заказ, у заказа есть позиции, которые должны быть вложены в исходящие заказы, (в заказе исходящие заказы, в которых позиции) и к исходящим заказам еще счет с позициями...
    PHP:
    order : [
      
    out_order1: [ 
        
    orde_item1:[product_idprice...],
        
    orde_item2:[product_idprice...],
        
    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
  7. Sad Spirit

    Sad Spirit мизантроп (Старожил PHPClub) Команда форума

    Сообщения:
    1.951
    Адрес:
    Moscow, Russia
  8. WMix

    WMix герр M:)ller

    Сообщения:
    3.011
    Адрес:
    Germany
    удобно... но не зенд,... да и дело не в имени, я и так мог инпутов нагенерить, хочется пользоваться валидаторами, фильтрами, хочется остоваться в фрэймворке, нехочется патчить,...
    а тут задачка такая, что поначалу волосы рвал от нехватки экспириенса в зенде...

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

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

    Sad Spirit мизантроп (Старожил PHPClub) Команда форума

    Сообщения:
    1.951
    Адрес:
    Moscow, Russia
    Дык, пользуйся, кто мешает:
    А кстати зенд уже научился жаваскрипт-валидацию автоматически строить?
  10. WMix

    WMix герр M:)ller

    Сообщения:
    3.011
    Адрес:
    Germany
    подумать надо, вроде ниче не мешает, кроме что не зенд.. начнется потом, скручивание валидаторов и фильтров со сторонней библиотекой,.. но подумать да попробывать может и стоит,
    хотя вот сейчас ненахожу ничего сложного и субформами писать... вот ток не нашел пока как имея элемент на руках вытащить его полное имя...
    типа Zend_Form_Decorator_JavascriptValidator такого
    не пробывал еще если чесно...