Как я могу использовать один набор полей формы во вложенной коллекции? - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю страницу для вставки данных, таких как книга.Где я использую Zend формы fieldset и коллекции.Fieldset имеет только два поля: заголовок поля и поле содержимого.Заголовок и подзаголовок имеют одинаковое содержимое (поля).

Пример:

1: Heading Content
   1.1: Sub Heading
   Content
      1.1.1: Sub Heading
      Content
      1.1.2: Sub Heading
      Content
         1.1.2.1: Sub Heading
         Content
         1.1.2.2: Sub Heading
         Content
         ...
      1.1.3: Sub Heading
      Content
      ..
   1.2: Sub Heading
   Content 
   ...
2: Heading Content

Примечание: здесь индексация просто показывает отношения родительского потомка.

Кодниже:

Это основная форма.

class BookPointlForm extends Form
 {
     public function __construct($name = null)
     {
         parent::__construct('Form');
         $this->add(array(
            'type' => 'Zend\Form\Element\Collection',
            'name' => 'points',
            'attributes' => array(
               'class'=> 'point_collection '
             ),
            'options' => array(
                'label' => 'Add Book Points',
                'count' => 1,
                'should_create_template' => true,
                'allow_add' => true,
                'target_element' => array(
                    'type' => 'Book\Form\BookPointMainFieldset',
                ),
            ),
        ));

         $this->add(array(
             'name' => 'submit',
             'type' => 'Submit',
             'attributes' => array(
                 'value' => 'Submit',
                 'id' => 'submitbutton',
                 'class' => 'btn btn-primary pull-right',
             ),
         ));
     }
 }

Этот набор полей вызывается в наборе баллов BookPointlForm

class BookPointMainFieldset extends Fieldset implements InputFilterProviderInterface
 {
     public function __construct($name = null)
     {
         // we want to ignore the name passed
         parent::__construct('Fieldset');

         $this->add(array(
            'type' => 'Zend\Form\Element\Collection',
            'name' => 'points',
            'attributes' => array(
               'class'=> 'point_collection '
             ),
            'options' => array(
                'label' => 'Add Book Points',
                'count' => 1,
                'should_create_template' => true,
                'allow_add' => true,
                'target_element' => array(
                    'type' => 'Book\Form\BookPointFieldset',
                ),
            ),
        ));

         $this->add(array(
             'name' => 'add_nested_point',
             'type' => 'Button',
             'attributes' => array(
                 'value' => 'Add nested point',
                 'class'=> 'add_nested_point'
             ),
             'options' => array(
                'label' => 'Add Nested Point',
                 ),
         ));
         $this->add(array(
            'type' => 'Zend\Form\Element\Collection',
            'name' => 'nested-points',
            'attributes' => array(
               'class'=> 'nested_point_collection '
             ),
            'options' => array(
                'label' => 'Add Book Points',
                'count' => 1,
                'should_create_template' => true,
                'allow_add' => true,
                'target_element' => array(
                    'type' => 'Book\Form\BookPointFieldset',
                ),
            ),
        ));

     }
     public function exchangeArray($data) {

    }
     public function getInputFilterSpecification()
     {
         return array(
             'weight' => array(
                 'required' => true,
             ),
         );
     }
 }

Это основной набор полей, он содержит заголовок и содержимое заголовка

class BookHeadingFieldset extends Fieldset implements InputFilterProviderInterface
 {
     public function __construct($name = null)
     {
         $kraHeadingText = '';
         // we want to ignore the name passed
         parent::__construct('BookHeadingFieldset');

//         $this
//             ->setHydrator(new ClassMethodsHydrator(false))
//             ->setObject(new KraHeading())
         ;
         $this->add(array(
             'name' => 'id',
             'type' => 'Hidden',
             'attributes' => array(
                    'value' => ''
            )
         ));
         $this->add(array(
             'name' => 'manualHeadingText',
             'type' => 'Textarea',
             'options' => array(
                 'label' => 'Heading',
                 'label_options' => [
                     'disable_html_escape' => true
                     ],

             ),
             'labelOptions' => array(
                 'disable_html_escape' => true,
             ),
             'attributes' => array(
                 'class' => 'form-control',
                 'placeholder'=>"Enter heading",
                 'COLS'=>"150",
//                'required' => 'true',
             ),
         ));



     }
     public function exchangeArray($data) {
    }
     public function getInputFilterSpecification()
     {
         return array();
     }
 }

...

...