私は、共通のプロパティを使用する多くのエンティティを持つサイトで作業しています。symfony3とDoctrineのManyToOne OrderBy:厳格なコントローラでEntityTypeフォーム要素を注文する方法
このエンティティのいずれかを作成または更新するたびに、このプロパティを特定のOrder(アルファベット順)でフォーム(HTML Select TAG)に表示する必要があります。
シンフォニー2では、findBy()クラスのリポジトリメソッドをオーバーライドしてorderBy節を追加するだけで十分だと思いますが、symfony3のようには動作しません。
symfony3でこのORDERBYをacomplishする唯一の方法はbuildForm方法を変更し、query_builderオプションを追加している...このような何か:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('myProperty', EntityType::class, array(
'class' => 'MyBundle:MyPropertyClass',
'required' => false,
'query_builder' => function ($er) {
return $er->createQueryBuilder('p')->orderBy('p.order', 'ASC');
}))
しかし、私はCOPY & PASTEこの考えを好きではありませんinput要素(EntityType)を注文するだけの、すべてのentityFormTypeのコード。
EntityTypeフィールドを使用してエンティティを編集するときに、要素を並べ替えるためのより良い/適切な方法が必要であることは確かです(アルファベット順)。 symfony2で提供されるソリューションはここでは機能しません。
誰でも同じ問題がありますか?
ちょうど私たちが
を必要に応じて、すべての選択入力が表示されたクラスのリポジトリでいくつかのメソッドをオーバーライドすることによって、方法 Symfony2ので1.- ClassRepositoryのfindAll()またはfindBy()何をして働いていません
ティ@OrderBy
class MyClassRepository extends EntityRepository{
public function findAll(){
return $this->findBy(array(),array('myProperty' => 'ASC'));
}
/**
* @inheritdoc
*/
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
{
$orderBy = $orderBy === null ? array('myProperty' => 'ASC') : $orderBy;
return parent::findBy($criteria, $orderBy, $limit, $offset);
}
}
2.-オブジェクトのプロパティの配列を並べ替えることですが、私は現在これを使用していますが、関係の反対側で、私が見つけようとしているのは、編集アクション/コントローラこのプロパティを使用するすべてのformTypeクラスのコードを変更する必要はありません:: Class(少し明確にするため、私のモデルのいたるところにあるenumのようなものです)
私はそれが既にこれを試して – Jonos