2017-03-02 26 views
0

我要創建一個帶有一列ID驗證的表單。 有幾個基於系統的選項,與Enum相同。如何使用Symfony格式處理ChoiceType的常用數據?

目標頁面應該是:

enter image description here

這裏我作爲實體的屬性:

/** 
* @var array<string> 
* 
* @ORM\Column(name="id_verification_requirements", type="simple_array", nullable=true) 
*/ 
private $idVerificationRequirements; 

我不知道如何建立表單元素並存儲相關數據。 我是否需要將特定數據作爲常量表保存在數據庫中? 似乎PHP不支持Enum。

同時我也必須在表單中處理頻率類型。 我有一些建議,以創建一個新的頻率類型來處理類似的數據:

頻率:

class Frequency{ 
private $count; 
// $unit must be defined in FrequencyUnit 
private $unit; 
function __construct($c, $u) 
{ 
    $this->count = $c; 
    $this->unit = $u; 
}} 

然後FrequencyUnit:

abstract class FrequencyUnit 
{ 
    const PER_DAY = "PER DAY"; 
    const PER_WEEK = "PER WEEK"; 
    const PER_MONTH = "PER_MONTH"; 
    const PER_YEAR = "PER_YEAR"; 
} 

如何像一個形式產生這種下拉列表還是有其他更好的方法來處理這種事情?

還有一個問題是,有沒有什麼方法可以在表單中只顯示一個標籤,就像子標題一樣?

非常感謝您的幫助。

++++++++++++++++++++++++++++++++++++++++++++++ ++++

目前,我有建立如下表單類型:

 ->add('frequencyCount', IntegerType::class,array('label' => 'Max Load Frequency')) 
     ->add('frequencyUnit', ChoiceType::class,array(
      'choices' => array(
       'Per Day' => 'Per Day', 
       'Per Week' => 'Per Week', 
       'Per Month' => 'Per Month', 
       'Per Year' => 'Per Year' 
      ), 
      'expanded' => false, 'multiple' => false 
     )) 
     ->add('idVerificationRequirements', ChoiceType::class, array(
       'label' => 'ID Verification Requirements', 
       'choices' => array(
        'Front' => 1, 
        'Back' => 2, 
        'Both' => 3 
       ), 
       'expanded' => true, 'multiple' => true 
      ) 
     ) 

頻率我有下面添加get和set函數來處理表單數據。

public function setFrequencyCount($count) 
{ 
    $this->loadFreq->setCount($count); 
    return $this; 
} 

public function getFrequencyCount() 
{ 
    return $this->loadFreq->getCount(); 
} 

public function setFrequencyUnit($unit) 
{ 
    $this->loadFreq->setUnit($unit); 
    return $this; 
} 

public function getFrequencyUnit() 
{ 
    return $this->loadFreq->getUnit(); 
} 

它似乎工作。 我不確定這應該是解決方案還是更好的方法。

現在,我只是想知道是否有某種方式來管理ChoiceType的選擇。構建表單時,我不想將其列爲陣列。我可以從其他班級獲得數據嗎?

非常感謝。

+0

我們是否應該假定您已經閱讀了[Symfony Forms文檔](https://symfony.com/doc/current/forms.html)和{Doctrine Documentation](https://symfony.com/doc) /current/doctrine.html)?如果是這樣,你有沒有嘗試過製作表格課程? –

+0

非常感謝。我現在列出了我正在做的事情。但仍然有一些問題。 – Bob

+0

你好鮑勃。確保你贊成Stackoverflow上的任何評論。如果他們遇到同樣的問題,我會幫助人們找出有用的建議。我會看看我能否回答你關於frequencyUnit的問題。 –

回答

0

我建議創建一個FrequencyUnit實體例如是這樣的:

<?php 

// src/AppBundle/Entity/Unit.php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="unit") 
*/ 
class Unit 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(name="unit_id", type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $unit_id; 

    /** 
    * @ORM\Column(name="value", type="string") 
    */ 
    protected $value; 

    /** 
    * Set value 
    * 
    * @param string $val 
    * 
    * @return Unit 
    */ 
    public function setValue($val) 
    { 
     $this->value = $val; 

     return $this; 
    } 

    /** 
    * Get value 
    * 
    * @return string 
    */ 
    public function getValue() 
    { 
     return $this->value; 
    } 
} 

然後在您的形式使用的EntityType像這樣:

... 
->add('unit', EntityType::class, array(
    'class' => 'AppBundle:Unit', 
    'query_builder' => function (EntityRepository $er) { 
     return $er->createQueryBuilder('u'); 
    }, 
    'choice_label' => 'value', 
)) 
... 

您將需要仍然添加值到實體。也許在你的控制器?

$unit = new Unit(); 
$unit->setValue('PER DAY'); 
... 

希望有幫助。很難給你一個好的徹底答案,因爲有很多方法可以做到這一點。

+0

非常感謝,Alvin。我將根據您的建議創建一個新表來處理所有這些信息。我認爲這應該是處理這些選擇的正確方法。 – Bob

+0

很高興幫助! –