2016-05-20 10 views
1

私はSonataでいくつかの動的フィルタを実装しようとしています。そして、私は髪を引っ張ります。ソナタで動的フィルタ(リンクされた選択ボックス)を実装する方法は?

実際、私には3つのオブジェクト(Engine> Motor> Sensor)があります。

class Engine { 
    /** 
    * @ORM\OneToMany(targetEntity=Motor, mappedBy=engine) 
    */ 
    private $motors; 
} 

class Motor { 
    /** 
    * @ORM\OneToMany(targetEntity=Sensor, mappedBy=motor) 
    */ 
    private $sensors; 

    /** 
    * @ORM\ManyToOne(targetEntity=Engine, inversedBy=motors) 
    */ 
    private $engine; 
} 

class Sensor { 
    /** 
    * @ORM\ManyToOne(targetEntity=Motor, inversedBy=sensors) 
    */ 
    private $motor; 
} 

このコードは、モデルのアイデアを持っているだけです。

管理部分では、エンジンとモーターでセンサをフィルタリングしたいと思います。ですから、エンジンを選ぶと、モーターのフィルターが自動的に変わります。

いくつかの調査の後で、私の研究は私をコールバックに導きます。しかし、私はそれを使用したことはありませんし、それに関するドキュメントは非常に小さいです。だから誰かが私を助けることができたら。ここで

は、管理者側のために私のコードです:

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 

class SensorAdmin extends Admin { 

    /** 
    * @param DatagridMapper $prmDatagridMapper 
    */ 
    protected function configureDatagridFilters(DatagridMapper $prmDatagridMapper) 
    { 
     $prmDatagridMapper 
      ->add("motor.engine", null, array("label" => "Engine")) 
      ->add('motor', null, array(
       "callback" => array($this, "callbackMotorFilter") 
      )) 
     ; 
    } 

    public function callbackMotorFilter ($queryBuilder, $alias, $field, $value) 
    { 
     if (!$value) { 
      return; 
     } 

     $queryBuilder->leftJoin(sprintf('%s.motor', $alias), 'm'); 
     $queryBuilder->leftJoin("m.engine", "e"); 
     $queryBuilder->andWhere('e.id = :engine_id'); 
     $queryBuilder->setParameter('engine_id', $value['value']); 

     return true; 
    } 
} 

は、事前にありがとうございます。

答えて

0

ここではどんな種類のAPIを使用してもよいでしょう。何トンものエンティティをフロントエンドに送るのは良い考えではありません。何千ものエンティティから選択すると、ブラウザがハングする可能性があります。

たとえば、単純なJSON APIで任意の種類のjQueryオートコンプリート入力を使用できます。

私はずっと前に実装しました。

フォームタイプ https://github.com/scaytrase/form-extensions/blob/master/src/ScayTrase/Forms/ExtensionsBundle/Form/Type/EntityAutocompleteType.php

jQueryプラグイン https://github.com/scaytrase/form-extensions/blob/master/src/ScayTrase/Forms/ExtensionsBundle/Resources/public/js/jquery.entity_autocomplete.js

小枝テンプレート https://github.com/scaytrase/form-extensions/blob/master/src/ScayTrase/Forms/ExtensionsBundle/Resources/views/Form/entity_autocomplete.html.twig

わからない、それは最新の3.0フォームと互換性がありますが、変更は、最終的には、そう

+0

簡単にする必要があります問題は新しいバージョンで解決されます。どうもありがとう – Mausly

関連する問題