3 回答

TA貢獻1833條經驗 獲得超4個贊
好吧,通過觀看我的代碼,答案并不明顯,因為當你看到
$countries = $countryRepository->findByRegionId($region->getId());
你可能認為返回的是國家數組,但實際上它是 JS 的助手,只返回 id 和 name
/**
* @param int $regionId
* @return array
*/
public function findByRegionId(int $regionId)
{
return $this->createQueryBuilder('c')
->select(['c.id', 'c.name'])
->where('c.region = :id')
->orderBy('c.name')
->setParameter('id', $regionId)
->getQuery()
->execute();
}
所以以防萬一其他人遇到這個問題: $choices 需要一個對象數組,而不是一個帶有 id 和 name 的數組,所以我修改了我的 addCountryDropDown 方法,如下所示
private function addCountryDropdown(FormInterface $form, ?Region $region, ?Country $country)
{
$countries = array();
if ($region) {
$countryRepository = $this->em->getRepository(Country::class);
$countries = $countryRepository->findBy([
'region' => $region->getId()
]);
}
$form->add('country', EntityType::class, [
'required' => true,
'data' => $country,
'placeholder' => 'Select a Region first ...',
'class' => Country::class,
'choices' => $countries
]);
}

TA貢獻1878條經驗 獲得超4個贊
使用 User 實體遷移到 Symfony 5.4 后,我遇到了同樣的錯誤?,F在 getRoles() 函數必須以字符串形式返回角色列表。就我而言,我有一個實體角色。
我通過在 User 實體中添加 getRolesObjects() 解決了這個問題:
public function getRolesObjects(): array
{
if(is_array($this->roles)) {
return $this->roles;
} else if($this->roles && ($this->roles instanceof Collection)) {
return $this->roles->toArray();
} else {
return [];
}
}
并在 FormType 中添加自定義 getter:
$builder
->add('firstName', TextType::class)
->add('lastName', TextType::class)
->add('email', TextType::class)
->add('roles', EntityType::class, [
'class' => Role::class,
'multiple' => true,
'getter' => function (User $user, FormInterface $form): array {
return $user->getRolesObjects();
}
]);
- 3 回答
- 0 關注
- 154 瀏覽
添加回答
舉報