2013-11-21 55 views
1

早上好,定製佈局sfWidgetFormDoctrineChoice禁用複選框

在Symfony的1.4,
我試圖做的是在這裏解釋:Customizing layout to sfWidgetFormDoctrineChoice
但它不工作。而不是添加縮略圖,我只想在輸入之前隱藏<li>,並且在某些情況下禁用/隱藏複選框輸入,但仍然顯示標籤
當我添加無參數的渲染,我得到這個錯誤:
sfWidgetFormMySelectCheckbox requires the following options: 'choices'.

這裏是我的格式化代碼:

class sfWidgetFormMySelectCheckbox extends sfWidgetFormSelectCheckbox 
{ 
    public function configure($options = array(), $arguments = array()) 
    { 
    parent::configure($options, $arguments); 
    } 

    protected function formatChoices($name, $value, $choices, $attributes) 
    { 
    ..... 

     // new 
     $inputs[$id] = array(
     'input' => sprintf('| test | %s', 
      $this->renderTag('input', array_merge($baseAttributes, $attributes)) 
     ), 
     'label' => $this->renderContentTag('label', self::escapeOnce($option), array('for' => $id)), 
    ); 
    } 

    return call_user_func($this->getOption('formatter'), $this, $inputs); 
    } 
} 

而現在,我把它叫做形式:

$this->setWidget('aaa', new sfWidgetFormDoctrineChoice(array(
    'model' => 'Aaa', 
    'expanded' => true, 
    'multiple' => true, 
    'add_empty' => false, 
    'query' => $query, 
    'renderer' => new sfWidgetFormMySelectCheckbox() 
))); 

感謝您的幫助!

回答

2

根據文檔,您必須將choices選項傳遞給renderer對象。嘗試這樣的事情:

$this->setWidget('aaa', new sfWidgetFormDoctrineChoice(array(
    'model' => 'Aaa', 
    'expanded' => true, 
    'multiple' => true, 
    'add_empty' => false, 
    'query' => $query, 
))); 

$this->widgetSchema['aaa']->setOption('renderer', new sfWidgetFormMySelectCheckbox(array(
    'choices' => new sfCallable(array($this->widgetSchema['aaa'], 'getChoices')) 
))); 

所以基本上你想讓渲染器對象從父窗口部件中獲得選擇。要做到這一點,你必須通過一個sfCallable對象,它需要一個array作爲第一個參數,在這個對象中你傳遞了父窗口部件的實例和函數名稱getChoices

還請記住,當您覆蓋renderer時,不會使用expanded選項。

+0

謝謝你的回答。 – Franck