2017-03-02 1 views
0

1つの列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"; 
} 

がどのようにのような形でこれを生成するための は、私のようなデータを処理するため、新たな周波数の種類を作成するために、いくつかの提案を持っていますドロップダウンリストやこのようなことに対処する他の良い方法がありますか?

さらにもう1つの質問は、サブタイトルのように、ラベルだけをフォームに表示する方法はありますか?

ありがとうございました。

++++++++++++++++++++++++++++++++++++++++++++++頻度については

 ->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 
      ) 
     ) 

を私が取得し、フォームデータを処理するための機能を設定して、以下の追加している:++++

現在、私は以下のようにフォームタイプを構築しています。

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で選択肢を管理する方法があるのだろうかと思います。私はフォームを構築するときに配列としてリストしたくありません。他のクラスからデータを取得できますか?

ありがとうございます。

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

あなたはまだ追加する必要があります。そうのようなフォームの使用EntityTypeで次に

<?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; 
    } 
} 

+0

あなたは、[Symfony Forms documentation](https://symfony.com/doc/current/forms.html)と{Doctrine Documentation(https://symfony.com/doc) /current/doctrine.html)?もしそうなら、フォームクラスを作ろうとしましたか? –

+0

ありがとう。私は今やっているやり方をリストアップしています。しかし、まだいくつかの質問があります。 – Bob

+0

こんにちはボブ。 Stackoverflowに関するコメントをアップヴォートすることを確認してください。私は人々が同じ問題を抱えている場合に役立つ提案を特定するのを助けます。 frequencyUnitに関する質問に答えることができるかどうかがわかります。 –

答えて

0

は、私はこのように、たとえばFrequencyUnitエンティティを作成することをお勧めエンティティへの値おそらくあなたのコントローラに?

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

うまくいけば助けてください。これを行う方法はたくさんあるので、あなたに良い徹底的な答えを与えるのは難しいです。

+0

ありがとう、アルヴィン。あなたの提案に基づいてこれらの情報をすべて扱う新しいテーブルを作成します。私はこれがこれらのオプションに対処する適切な方法であるべきだと思います。 – Bob

+0

喜んで助けてください! –

関連する問題