自定义窗口小部件不会显示相同数量的选项

时间:2013-04-29 08:35:04

标签: php oop widget symfony-1.4

我尝试使用特殊的tablemethod创建一个customWidget,只显示用户的预先选择的选项,这是以下形式:

$this->widgetSchema['Books_list'] = new MyWidgetFormThematicSelector(array(
            'multiple' => true,
            'model' => 'Books',
            'table_method' => array('method' => 'getOnlySelected', 'parameters' => array($this->getObject()->getId())),
            'expanded' => true,
        ));

这是方法getOnlySelected:

$q = Doctrine::getTable('BooksAuthors')
                ->createQuery('ba')
                ->select('ba.position,ba.name')
                ->leftJoin('ba.Books b')
                ->where('ba.BooksAuthors_id = ?', $id); 
 echo count($q); //return 4
 return $q;

这个方法返回4个正常的元素然后如果我尝试从小部件中回显getChoices方法的值,我得到的只有1个!?

class MyWidgetFormThematicSelector extends sfWidgetFormDoctrineChoiceWithParams {

  public function configure($options = array(), $attributes = array()) 
  {
    parent::configure($options, $attributes);
  }


  public function getChoices() {

    $choices = parent::getChoices();
    echo count($choices);  // return 1
    return $choices;
  }

  public function render($name, $value = null, $attributes = array(), $errors = array()) {

    return parent::render($name, $value, $attributes, $errors);

  }

}

这里发生了什么?

我以相同的形式创建了一个类似的小部件,其中没有出现问题,而且代码完全相同......

THX

1 个答案:

答案 0 :(得分:0)

我通过设置属性'key_method'=>解决了这个问题'myUniqueId',以调用小部件的形式... 因为我的表中有两个主键,sfWidgetFormDoctrineChoiceWithParams小部件使用一个对所有结果都相同的数组作为数组选择的键,所以数组的大小总是一个...通过将另一个主键设置为getChoices方法的主键我得到了正确的结果。