0

현재 zend-expressive로 작업 중입니다. 이제는 zend-form을 사용하여 양식을 생성하고 싶습니다. 모든 것이 제대로 설치되었습니다.zend-form 컬렉션에서 올바른 이름을 생성하지 않습니다.

{{ form().openTag(form)|raw }} 

    {{ formElement(form.get('id')) }} 

    {% set element = form.get('name') %} 
    <div> 
     {{ formLabel(element) }} 
     <div> 
      {{ formElement(element) }} 
     </div> 
    </div> 

    {% set collection = form.get('features') %} 
    {{ formLabel(collection) }} 
    {% for element in collection %} 
     <div> 
      {{ formSelect(element) }} 
     </div> 
    {% endfor %} 

{{ form().closeTag(form)|raw }} 

이 멋지게 폼을 표시 : 나는 다음 코드를 내 템플릿 (나뭇 가지)에서

<?php 

use Zend\Filter; 
use Zend\Form\Element; 
use Zend\Form\Form; 
use Zend\ServiceManager\Exception; 
use Zend\Validator; 

class CategoryForm extends Form 
{ 
    public function __construct($features = []) 
    { 
     parent::__construct('category'); 

     $this->add([ 
      'name' => 'id', 
      'type' => Element\Hidden::class, 
     ]); 

     $this->add([ 
      'name' => 'name', 
      'type' => Element\Text::class, 
      'options' => [ 
       'label' => 'Name', 
      ], 
     ]); 

     $this->add([ 
      'name' => 'features', 
      'type' => Element\Collection::class, 
      'options' => [ 
       'label' => 'Features', 
       'target_element' => new Element\Select('feature', $features), 
      ], 
     ]); 
    } 
} 

: 지금 다음과 같은 설정이있다. 이제 내 문제. 나는 카테고리를 편집하려고하면,이 같은 양식을 채울 :

$formData = [ 
    'id' => $category->getId(), 
    'name' => $category->getName(), 
    'features' => [ 
     2, 
     3, 
    ], 
]; 

$this->categoryForm->setData($formData); 

하지만 지금은 양식을 생성 냈다 다음 : 당신이 볼 수 있듯이

<form action="" method="POST" name="category"> 
    <input name="id" value="2" type="hidden"> 

    <div> 
     <label>Name</label> 
     <div> 
      <input name="name" value="Foo" type="text"> 
     </div> 
    </div> 

    <label>Features</label> 

    <div> 
     <select name="features[0]"> 
      <option value="1">A</option> 
      <option value="2" selected>B</option> 
      <option value="3">C</option> 
     </select> 
    </div> 

    <div> 
     <select name="1"> <!-- The name is wrong here --> 
      <option value="1">A</option> 
      <option value="2">B</option> 
      <option value="3" selected>C</option> 
     </select> 
    </div> 
</form> 

, 두 번째 선택 요소가 잘못이있다 이름. 그 밖의 모든 것은 위대한 일이지만 이름의 생성. 내가 뭔가를 놓친다면 나는 모른다. 나는 정말로 다른 웹 사이트에서 도움을 얻으려고했지만 아무것도 문제를 해결하지 못했습니다. 어쩌면 내 실수를보고이 양식으로 끝내도록 도울 수 있습니다.

미리 감사드립니다.

답변

1

디버깅 후 몇 시간이 지난 후 prepare()를 너무 일찍 사용했음을 알았습니다. 이제 setData를 사용한 후에 양식을 준비하면 모든 것이 잘 작동합니다.