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 后,我遇到了同样的错误。现在 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 关注
- 123 浏览
添加回答
举报