[英]Symfony form dropdown for entries
我從在Symfony中進行編碼開始,遇到以下問題:
假設我有兩個實體“客戶”和“項目”。 它們與學說一起存儲。
客戶有一個ID,名稱和電子郵件項目有一個ID,client_id,名稱
因此,一個項目基本上屬於一個客戶,一個客戶有很多項目。
我現在的問題是:
在創建項目時,我希望所有可能的客戶都有一個下拉菜單。 當我可能在項目的其他地方使用客戶端的方法時,我在問自己是否有一種聰明的方法來處理這樣的事情:
class ProjectType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text');
$builder->add('client', new ClientListType());
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Project'
));
}
public function getName()
{
return 'project';
}
}
class ProjectController extends Controller
{
public function createAction(Request $request)
{
$project = new Project();
$options = array( ... );
$form = $this->createForm(new ProjectType(), $project, $options);
$form->handleRequest($request);
if($form->isValid()){
// persist project
return $this->redirectToRoute('show_projects');
}
return $this->render('AppBundle:Client:create.html.twig', array(
'form' => $form->createView()
));
}
}
其中, ClientListType
將所有可能的Clients的select語句添加到表單。 $ form-> isValid()檢查客戶端(id)是否有效。
目前,我在ProjectType中具有以下代碼來生成下拉菜單項:
function __construct($clients)
{
$this->clients = $clients;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text');
$builder->add('client', 'choice', array(
'choices' => $this->buildChoices()
));
}
public function buildChoices()
{
$res = array();
foreach ($this->clients as $client) {
$res[$client->getId()] = $client->getName();
}
return $res;
}
但是我假設有一種更好的方法來執行此操作,因為這似乎是一個常見問題。
我要做的就是這樣:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text')
->add('client', 'entity', array(
'class'=>'AppBundle\Entity\Client',
'property'=>'name'
));
}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.