2013-11-26 2 views
1

를 설정하지 않습니다 :Symfony2 - 확장 된 선택 (양식) 양식에 다음 코드를 갖는 디폴트 값 (들)

 ->add('groups', 'model', array(
       'class' => 'FOS\UserBundle\Propel\Group', 
       'required' => true, 
       'multiple' => true, 
       'expanded' => true, 
       'query' => GroupQuery::create()->orderByName(), 
     )) 

이 제대로 체크 박스를 렌더링하지만, defaultvalues를 설정하지 않습니다. "expanded => false"로 설정하면 선택 목록이되지만 기본값은 올바르게 설정됩니다. Symfony에서 버그가 있습니까?

답변

0

이것은 doctrine 대신 propel을 사용할 때 버그입니다.

나는 당신과 같은 문제가있어서 왜 그것이 작동하지 않는지 알아 냈습니다.
getValuesForChoices라는 이름의 vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ChoiceList.php에 함수가 있습니다.
이 함수는 2 개의 객체를 '==='와 비교합니다. 교리에서 이것은 작동하지만 Propel을 사용하면 false를 반환합니다.

public function getValuesForChoices(array $choices) 
{ 
    $choices = $this->fixChoices($choices); 
    $values = array(); 

    foreach ($choices as $i => $givenChoice) { 
     foreach ($this->choices as $j => $choice) { 
      if ($choice === $givenChoice) { 
       $values[$i] = $this->values[$j]; 
       unset($choices[$i]); 

       if (0 === count($choices)) { 
        break 2; 
       } 
      } 
     } 
    } 

    return $values; 
} 

이것은 실패한 기능입니다. 다음은 개체 예 차이 번호가 있기 때문에 실패 비교 : 그것은이 비교 할려고 : 오브젝트 (벤더 \ 번들 \ 모델 \ 태그) # 506 오브젝트 (벤더 \ 번들 \ 모델 \ 태그) # 397

참고 : 이것은 수정 사항이 아니며 문제에 대한 설명입니다. 객체가 동일한 경우는 내가 확인하기 위해 추진 기능을 사용할 때마다

은 체크 박스가 가득 :

public function getValuesForChoices(array $choices) 
{ 
    $choices = $this->fixChoices($choices); 
    $values = array(); 
    foreach ($choices as $i => $givenChoice) { 

     foreach ($this->choices as $j => $choice) { 

      if ($choice->equals($givenChoice)) { 
       $values[$i] = $this->values[$j]; 
       unset($choices[$i]); 

       if (0 === count($choices)) { 
        break 2; 
       } 
      } 
     } 
    } 

    return $values; 
} 

또 다른 흥미로운 점은 추진의 InstancePooling입니다. 문서에서

:
http://propelorm.org/Propel/documentation/03-basic-crud.html#propel-instance-pool

추진은 이미 PHP 스크립트에서 두 번 같은 요청을 호출하지 않도록 메모리에 검색 한 개체의 목록을 유지합니다. 이 목록은 인스턴스 풀이라고하며 이전 요청 인 에서 자동으로 채워집니다. findPk 또는 findOneById를 통해 기본 키를 사용하는 객체에 대해 을 검색 할 때마다 인스턴스 풀이 참조됩니다 ( 은 이전의 별칭 임).

그러나 저는 초보자이며 propel과 symfony에 대해 많이 알지 못해서 왜 이것이 작동하지 않는지 모르겠습니다.

+0

이 버그는 심포니 팀에서 이미 알고 있습니까? – Chris

+0

참조 : https://github.com/propelorm/Propel/issues/789 – Chris