ほとんどすべてのプロジェクトで、指定された形式でドロップダウンリストを表示する必要があります。このフォームは、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で見つけることができます 。