私は通常、ユーザーが選択可能なプロパティを対応するクラスにマップします
class Person {
/**
* @ORM\ManyToMany(targetEntity="HobbyClass")
*/
private $hobby
}
class HobbyClass{
private $name; // e.g. "Outdoors"
}
エンティティを作成または編集するには、フォームでエンティティ タイプのフォーム フィールドを使用するだけです。次に、小枝でエンティティ ビューを表示する必要がある場合は、次のようにします。
{% for item in person.hobby %}
<li>{{ item.name }}</li> {# e.g. "Outdoors" #}
{% endfor %}
しかし今回は、ChoiceListInterface を実装するクラス Selectables を使用しています。
class Entity {
/**
* @var array
*/
private $properties
}
class Selectables implements ChoiceListInterface {
...
}
次に、選択タイプのフォームフィールドを使用してこのエンティティを作成および編集します。もちろん、小枝では、以前のようにプロパティの名前ではなく、キーを取得します
{% for item in entity.properties %}
<li>{{ item }}</li> {#e.g. "property_key", whereas its name is "Sports"#}
{% endfor %}
問題は、データがフォーム内でのみ意味を持つ単なるキーの配列であることです。しかし、エンティティ ビューで人間が読めるように表示する必要があります。
ChoiceListInterface を使用する理由は、選択リストが CRUD で更新されず、コードで維持できるためです。使用するのに少し手間がかかり、結合やデータベース テーブルは必要ありません。
これに対する最善の解決策は次のとおりです。
- a. 以前のようにテーブルと関連付けを使用する
- b. ChoiceListInterface クラスから対応する値を取得するカスタム小枝拡張のコード
- c. 選択リストを使用し、キーを翻訳可能にして、プロパティ名として表示されるようにします
- d. 他に何か
ありがとう