我已將collection
表單字段類型擴展爲CollectionTableExtension
。我試圖設置一個變量,FormView::$vars['headers']
,這樣當is_table
爲true
且沒有用戶定義的頭可用時,collection
可以使用默認標頭輸出。默認標題應該與通常應用於集合成員的標籤相同。如何訪問收集擴展中的收集成員標籤
例如
FooType
如果有3個字段,foo
,bar
和fibble
,其標籤將是富,酒吧和肥波(具有枝條模板人源化之後)或存儲在每個屬性的屬性label
的值。
所以,如果我的DoofusType
有FooType
秒的採集,
$builder->add('foos', 'collection', array('type'=>'acc_foo', 'is_table'=>true));
應導致視圖,其中用於收集標題將是富,酒吧和肥波或FooType
如果標籤屬性的值他們被設置。
這裏是我的collection
擴展:
<?php
namespace ACC\MainBundle\Form;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CollectionTableExtension extends AbstractTypeExtension
{
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setOptional(array('is_table'));
$resolver->setOptional(array('headers'));
$resolver->setOptional(array('caption'));
}
public function getExtendedType()
{
return 'collection';
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
if (array_key_exists('is_table', $options)) {
$view->vars['is_table'] = $options['is_table'];
if (array_key_exists('caption', $options)) $view->vars['caption'] = $options['caption'];
if (array_key_exists('headers', $options)) {
$view->vars['headers'] = $options['headers'];
}else{
//harvest labels from collection members, but HOW?
}
}
}
}
的問題是,我不知道如何從收集擴展中訪問集合元素類型的屬性。我可以像這樣訪問集合中的第一個元素:
if($form->has('0')) {
foreach($form->get('0')->all() as $item)
$view->vars['headers'][] = $item->getName();
}
但是,如果集合爲空,則不起作用。如果集合元素類型定義了標籤,它也沒有幫助。有任何想法嗎?