2012-02-03 36 views
0

我在symfony2中創建自己的表單類型,但我無法訪問我自己的buildView函數中的defaultOptions。下面是代碼:symfony2自定義表單類型 - 自己的defaultOptions

public function getDefaultOptions(array $options) 
{   
    return array(
     'identifier' => isset($options['identifier']) ? $options['identifier'] : '#star', 
     'currentRating' => isset($options['currentRating']) ? $options['currentRating'] : 0, 
    ); 
} 

/** 
* {@inheritdoc} 
*/ 
public function buildView(FormView $view, FormInterface $form) 
{     
    $view->set('currentRating', $form->getAttribute('currentRating')); 
    $view->set('idientifier', $form->getAttribute('identifier')); 
} 

錯誤:

Notice: Undefined index: currentRating in ... 

我不讀什麼,這是不可能的。 謝謝你的幫助。

回答

3

在您的類型的方法buildForm中,您需要明確指定要在方法buildView中使用的屬性。下面是你應該怎麼做:

public function buildForm(FormBuilder $builder, array $options) 
{ 
    // Code here 

    $builder->setAttribute('currentRating', $options['currentRating']); 
    $builder->setAttribute('identifier', $options['identifier']); 
} 

public function buildView(FormView $view, FormInterface $form) 
{ 
    $view->set('currentRating', $form->getAttribute('currentRating')); 
    $view->set('identifier', $form->getAttribute('identifier')); 
} 

這應該有所斬斷。 希望這有助於。

問候,
馬特

0

@馬特的答案是偉大的,但只是一個使用Symfony的2.1+任何人通知:

加入第三個參數(https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md),以buildView這是需要稱爲數組$選項所以確保你添加這個。

所以,如果你使用的Symfony 2.1+做到這一點:

public function buildForm(FormBuilder $builder, array $options) 
{ 
    // Code here 

    $builder->setAttribute('currentRating', $options['currentRating']); 
    $builder->setAttribute('identifier', $options['identifier']); 
} 

public function buildView(FormView $view, FormInterface $form, array $options) 
{ 
    $view->set('currentRating', $form->getAttribute('currentRating')); 
    $view->set('identifier', $form->getAttribute('identifier')); 
}