내 응용 프로그램에는 클래스 A와 B가 있습니다. 클래스 A의 개체는 클래스 B의 많은 개체를 소유하고 있습니다.하나의 속성에 대해 프로토 타입 위젯 템플릿을 사용자 정의하려면 어떻게해야합니까?
이 개체를 편집하려면 복합 양식이 있어야합니다. 외부 양식은 오브젝트 A의 특성을 편집하고 내부 양식은 B의 모든 소유 인스턴스를 편집합니다.이 부속 양식은 항목을 표 행으로 표시해야합니다. 테이블 자체는 외부 양식에 의해 정의됩니다.
내 프로젝트에서 PHP 템플릿 엔진을 사용하고 있습니다. 지금까지 필자는 B 형의 객체를 편집하기 위해 템플릿 위젯을 덮어 썼습니다. B의 모든 인스턴스를 보유하고있는 A의 속성은 양식에 collection
으로 렌더링됩니다. 이것은 다음과 같은 템플릿이 렌더링되는 의미 : collection_widget.html.php -> form_widget_compound.html.php -> form_rows.html.php -> form_row.html.php -의> my_custom_template_widget.html.php
그러나 일부를 이 템플릿은 렌더링중인 템플릿을 둘러싸는 태그를 추가하여 테이블 레이아웃을 파괴합니다. _formForA_propertyB_widget.html.php를 생성하고 거기에 모든 것을 수동으로 렌더링하여이 속성에 대한 템플릿을 덮어 쓰면이 문제를 해결할 수있었습니다.
지금 문제는이 컬렉션에 개체를 추가 할 수 있어야한다는 것입니다. Symfony에서 제공하는 프로토 타입 기능을 사용하여이 작업을 수행하려고합니다. 그러나 프로토 타입은 덮어 쓰여진 템플릿을 사용하여 만들지 않은 것 같습니다 (물론 컬렉션이 아니고 단일 행이 아니기 때문에). 대신 form_row.html.php를 사용하여 만듭니다. _formForA_propertyB_form.html.php를 작성하여이 덮어 쓰기를 시도했지만 아무런 차이가 없습니다.
이 특정 속성에 대한 프로토 타입 템플릿을 어떻게 덮어 쓸 수 있습니까?
본질적으로이 질문은 How to customize the data-prototype attribute in Symfony 2 forms과 매우 비슷하지만이 것은 PHP를 템플릿 엔진으로 사용하는 것과 같습니다. 다른 질문에 대한 답변은 PHP 엔진에서 사용할 수없는 TWIG 템플릿 엔진의 기능을 사용합니다.
조회수/EditA.html.php :
<table data-prototype="<?php echo $view->escape($view['form']->row($form['collectionOfB']->vars['prototype'])) ?>">
<thead>
<tr>
<th>Description</th>
<th>Prop1</th>
<th>Prop2</th>
</tr>
</thead>
<tbody>
<?php echo $view['form']->widget($form['collectionOfB']) ?>
</tbody>
</table>
조회수/양식/_objectA_collectionOfB_widget.html.php :
<?php foreach ($form as $child) : ?>
<?php echo $view['form']->widget($child) ?>
<?php endforeach; ?>
샘플 코드는 문제를 설명하기 위해 조회수/형식/objectB_widget.html.php :
<tr>
<td><?php echo $view['form']->widget($form['description']) ?>
<?php echo $view['form']->errors($form['description']) ?></td>
<td><?php echo $view['form']->widget($form['prop1']) ?>
<?php echo $view['form']->errors($form['prop1']) ?></td>
<td><?php echo $view['form']->widget($form['prop2']) ?>
<?php echo $view['form']->errors($form['prop2']) ?></td>
</tr>
나는 형태가 제대로 렌더링됩니다 만,이 프로토 타입, 말했듯이 :
<div>
<label class="required" >__name__label__</label>
<tr>
<!-- snip more code here -->
</tr>
</div>
당신이 내가 그것을 것 같은 원하지 않는 모두의 label
과 div
을 포함하고 있음을 알 수 테이블을 파괴하라.