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_v3select2_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::classsuggesterパラメーターおよびurl /suggest/adminます。


4.使用する


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

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



Source: https://habr.com/ru/post/J304572/


All Articles