symfonyのSuggestBundleまたはAjaxドロップダウン

ほとんどすべてのプロジェクトで、指定された形式でドロップダウンリストを表示する必要があります。このフォームは、ajaxを使用してロードされます。 これに関して、2年前にsymphonyのSuggestBundle作成しました。これには、標準のentity



タイプとdocument



タイプの代わりに使用できる追加のフォームタイプが含まれています。 バンドルの主要な機能は、ドロップダウンリストがajaxを使用して( select2ライブラリを使用して)ロードされることです。 先日、ついにバンドルにドキュメントを書くための力を集め、開発をコミュニティと共有することにしました。







さらに、このバンドルを使用して、 Doctrine ORMおよびDoctrine ODMに関連付けられていないドロップダウンリストを作成することもできます。







catの下で、バンドルのインストール、構成、および使用の手順。









バンドルへのリンク: https : //github.com/sirian/suggest-bundle







1.インストール



composer.json



ファイルのrequire



セクションにsirian/suggest-bundle



パッケージを追加します。







 $ composer require sirian/suggest-bundle
      
      





SuggestKernelをAppKernel.phpに追加します。







 <?php public function registerBundles() { $bundles = array( // ... new Sirian\SuggestBundle\SirianSuggestBundle(), // ... ); ... }
      
      





2.設定



バンドルをセットアップしたら、ルーティング構成に次の行を追加します。







 # app/config/routing.yml _sirian_suggest: resource: "@SirianSuggestBundle/Resources/config/routing.yml" prefix: /suggest
      
      





そして、フォームにデフォルトで使用されるウィジェットのバージョンを選択します(プロジェクトで使用するselect2ライブラリのバージョンに依存します)。 有効な値はselect2_v3



select2_v4



です。 また、フォームタイプSuggestType::class



を使用するときにデフォルトで使用される他のフォームオプションを指定することもできます。







 # app/config/config.yml ... sirian_suggest: form_options: widget: select2_v4 attr: placeholder: "Search..."
      
      





3.サガーの構成



Doctrine ODMおよびDoctrine ORMエンティティからのドキュメントの場合、プロジェクトのconfig.ymlファイルで必要なサガーを簡単に説明できます。







3.1。 Doctrine ODMドキュメント(Mongodb)



 # app/config/config.yml ... sirian_suggest: odm: category: class: "MainBundle:Category" property: name user: class: "MainBundle:User" property: username search: email: ~ username: ~
      
      





3.2。 Doctrine ORMエンティティ



 # app/config/config.yml ... sirian_suggest: orm: category: class: "MainBundle:Category" property: name user: class: "MainBundle:User" property: username search: email: ~ username: ~
      
      





3.3。 任意のサガー



ドロップダウンスピーカーを構築するために追加のロジックが必要な場合は、独自のセージスターを作成できます。 たとえば、 ROLE_ADMIN



ロールを持つユーザーのみを含むAdminSuggester



を作成しましょう。 簡単にするために、抽象クラスDocumentSuggester(またはDoctrine ORMのEntitySuggester)からクラスを継承できます。







 <?php namespace App\MainBundle\Suggest; use App\MainBundle\Document\User; use Doctrine\Common\Persistence\ManagerRegistry; use Sirian\SuggestBundle\Suggest\DocumentSuggester; use Sirian\SuggestBundle\Suggest\Item; use Sirian\SuggestBundle\Suggest\SuggestQuery; class AdminSuggester extends DocumentSuggester { public function __construct(ManagerRegistry $registry) { $options = [ 'class' => User::class, 'id_property' => 'id', 'property' => 'username', //   ,          'search' => ['name' => 1, 'username' => 1, 'email' => 1] ]; parent::__construct($registry, $options); } protected function createSuggestQueryBuilder(SuggestQuery $query) { $qb = parent::createSuggestQueryBuilder($query); $qb->field('roles')->equals('ROLE_ADMIN'); return $qb; } }
      
      





sirian_suggest.suggester



タグを使用して、 services.yml



の新しいサービスを説明しservices.yml









  app.suggester.admin: class: App\MainBundle\Suggest\AdminSuggester arguments: ["@doctrine_mongodb"] tags: - {name: 'sirian_suggest.suggester', alias: 'admin'}
      
      





エイリアスadmin



は、フォームタイプSuggestType::class



suggester



パラメーターおよびurl /suggest/admin



ます。







4.使用する



 $formBuilder->add('category', SuggestType::class, [ 'suggester' => 'category' ])
      
      





PSバンドルと追加機能の使用に関する詳細は、 https://github.com/sirian/suggest-bundleで見つけることができます








All Articles