ron*_*ald 2 doctrine symfony doctrine-orm
我想使用 ChoiceType 构建一个表单,并且选项值/选择基于数据库表(已经有记录)。
当表单显示时,宗教列表将在下拉列表/组合框中可用。
例子 :
$builder->add('name', ChoiceType::class, array(
'choices' => $religions //List of religions
));
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的代码:
class Religion
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=50)
*/
protected $name;
/*** getter/setter ... ***/
}
Run Code Online (Sandbox Code Playgroud)
/表格/宗教类型
class ReligionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', ChoiceType::class, array(
'choices' => ____________
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Religion'
));
}
public function getName()
{
return 'app_bundle_religion_type';
}
}
Run Code Online (Sandbox Code Playgroud)
/控制器
/**
* @Route("/religion/select", name="religion_select")
*
*/
public function selectAction()
{
$em = $this->getDoctrine()->getManager();
$religions = $em->getRepository('AppBundle:Religion')->findAll();
$form = $this->createForm(ReligionType::class, ________);
return $this->render(
'religion/index.html.twig', array(
'form' => $form->createView()
)
);
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道该写什么,所以我将其保留为 __________ 以及缺少的代码是什么。
/宗教知识库
class ReligionRepository extends EntityRepository
{
public function findAll()
{
return $this->getEntityManager()
->createQuery(
'SELECT p FROM AppBundle:Religion p ORDER BY p.name ASC'
)
->getResult();
}
}
Run Code Online (Sandbox Code Playgroud)
/树枝文件
{% extends 'base.html.twig' %}
{% block body %}
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit">Save</button>
{{ form_end(form) }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
正如 Rvanlaak 所建议的,这是解决方案。
//ReligionType
$builder->add('religions', EntityType::class, array(
'class' => 'AppBundle\Entity\Religion',
'choice_label' => 'name'
));
//Controller
public function newAction(Request $request)
{
$religion = new Religion();
$form = $this->createForm(ReligionType::class, $religion);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($religion);
$em->flush();
//return $this->redirectToRoute('homepage');
}
return $this->render(
'religion/new.html.twig',
array(
'form' => $form->createView()
)
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8775 次 |
| 最近记录: |