Symfony2のバンドルについてです。Symfony2の最初のバージョンは2年以上前に書きました。 この間ずっと、同僚と私はそれを積極的に使用し、バンドルは定期的に改善されました。 コミュニティと共有することにしました。
ほとんどすべてのアプリケーションで、エンティティのテーブルリストを表示する必要があります。ページネーションが必要です。また、すべてのフィールドで並べ替えることができ、柔軟なフィルタリングが可能です。 裁判所に提供されたAdminPanelBundleが解決するのはこれらのタスクです。 もちろん、これは新しいものではありません-同じSonataAdminBundleは同様の機能を提供しますが、Sonataは多くの設定と依存関係を持つ(言葉の意味では)モンスターであり、私の目標は大きなテーブル配列を介した高速で柔軟なナビゲーションを実装することでした。
バンドルでできること:
- 入力は配列、Doctrine \ ORM \ Query、Doctrine \ ORM \ QueryBuilder、Doctrine \ Common \ Collection \ ArrayCollectionです
- 特定のフィールド(プロパティ)のみが表示されます。
- 任意のフィールド(プロパティ)に対して、演算子(=、>、<、LIKEなど)を選択して、無制限の数のフィルター(AND、OR)を定義できます。
- どのフィールドでも、ソートを有効/無効にすることができます
- フィルターを適用すると、セッションでフィルターパラメーターが記憶され、再度ページにアクセスすると、パラメーターが適用されます
- 任意の数値列で自動合計を表示することが可能です
デモは
こちら 、ソースコードは
こちらです。
インストールと基本構成
いつものように-実行
composer require "zk2/admin-panel-bundle:dev-master"
バンドルは
knplabs / knp-paginator-bundleと
braincrafted / bootstrap-bundleを使用します。アプリケーションにない場合はインストールされます
KnpPaginatorBundleのセットアップapp / AppKernel.phpで、バンドルを初期化します
BraincraftedBootstrapBundleのセットアップapp / AppKernel.phpで、バンドルを初期化します
セットアップは、
ここで簡単に説明されてい
ます 。
# app/config/config.yml ....... # Assetic Configuration assetic: debug: use_controller: false bundles: [ ] filters: # node less: node: /usr/bin/node # $ whereis node node_paths: [/usr/lib/node_modules] # $ whereis node_modules apply_to: cssrewrite: ~ braincrafted_bootstrap: less_filter: less jquery_path: %kernel.root_dir%/../web/js/jquery-1.11.1.js # jQuery
次に行うこと:
php app/console braincrafted:bootstrap:install php app/console assetic:dump
app / AppKernel.phpでバンドルを初期化し、app / config / config.ymlで必要な設定を追加します。
# app/config/config.yml ...... twig: ...... form: resources: - # zk2_admin_panel: check_flag_super_admin: false # -- true, , pagination_template: Zk2AdminPanelBundle:AdminPanel:pagination.html.twig # - sortable_template: Zk2AdminPanelBundle:AdminPanel:sortable.html.twig # -
スタイル、アイコンなどをロードします
php app/console asset:install web --symlink
使用する
小さなアプリケーション
「Cars」の例でデモンストレーションします。
古典的な構造-国->ブランド->モデル
満たされたデータを厳密に判断しないでください-すべてが「懐中電灯から」です。
コントローラーはZk2 \ Bundle \ AdminPanelBundle \ AdminPanel \ AdminPanelControllerを継承する必要があります
親コンストラクターは以下を受け入れます。
- コアエッセンス
- このエンティティのエイリアス
- オプションのパラメーター「name entity_manager」-デフォルトは「default」
namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Zk2\Bundle\AdminPanelBundle\AdminPanel\AdminPanelController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class DefaultController extends AdminPanelController { public function __construct() { parent::__construct('AppBundle\Entity\Model','m'); }
listAction-mainメソッド
public function listAction( Request $request ) {
テーブル列の作成:
addInListメソッドは配列を受け取ります。
- エンティティのプロパティ
- 列見出し(transメソッドは、標準のSymfony関数に類似しています。値、ドメイン、パラメーターの配列を受け取ります)
- エイリアスエンティティ
- オプションの配列
オプション配列のデフォルト値は次のとおりです。
- 'sort' => true、-列をソートします
- 'func' => null、-関数(dateTimeFormat)
- 'filter' => null、-フィルター(yes_no)
- 'method' => null、-プロパティまたはメソッドの名前
- 'autosum' => null、-autosumの一意のエイリアス
- オプションの配列にも存在する場合があります。
- 'link_id' => 'brand_edit'-ルートの名前
- 'lid' => 'brand_id'-IDをルートに転送するためのプロパティまたはメソッド名
- 'style' => 'text-align:center'-任意のcssスタイル(テーブルセルに適用)
- 'icon_path' => '/ img /'-タグでラップimg src = "{icon_path} value"
- 'icon_width' => 24-icon_pathで使用(画像の幅)
- 'zkNumberFormat' => array(2、 '。'、 '')-PHP :: number_format
- 'dateTimeFormat' => 'Ymd'-funcに使用:: dateTimeFormat
オプションとその使用に関する詳細は、ソースコード
AdminPanelBundle / Resources / views / AdminPanel / adminList.html.twigにあります。任意のオプションを渡すことができますが、SymfonyのオーバーライドのいずれかでadminList.html.twigテンプレートを再定義し、必要に応じて処理する必要があります。
public function buildListFields() { $this ->addInList(array( 'name',
フィルターの作成:
addInFilterメソッドは配列を受け取ります:
- 'b_name'-アンダースコアを使用したエイリアスとプロパティ名
- 'zk2_admin_panel_XXXXX_filter'-フィルタータイプ
- フィルター名
- フィールドのフィルターの数
- 利用可能な演算子のセット(LIKE、=、>、<など)。 詳細-AdminPanel / ConditionOperator.php
- パラメータの配列
フィルタータイプ:
- 'zk2_admin_panel_boolean_filter'-ブール値フィルター(yes / no)
- 'zk2_admin_panel_choice_filter'-ここで定義されたドロップダウンリスト
- 'zk2_admin_panel_date_filter'-日付によるフィルター
- 'zk2_admin_panel_entity_filter'-エンティティを含むドロップダウンリスト(データベースへのクエリが実行されます)
- 'zk2_admin_panel_text_filter'-プレーンテキストフィールド
public function buildFilterFields() { $this ->addInFilter(array(
フォームのメソッド
public function editBrandAction( Request $request, $id ) { ............ } public function editAction( Request $request, $id ) { ..... } }
さて、非常にシンプルなテンプレート
# AppBundle:Model:list.html.twig {% extends %} {% block zk2_title %}Models list{% endblock %} {% block zk2_h %}<h1>General list</h1>{% endblock %} {% block zk2_body %} {% if filter_form %} {% include 'Zk2AdminPanelBundle:AdminPanel:adminFilter.html.twig' with { 'filter_form': filter_form, 'colspan': 2, {# - #} 'this_path': path('model_list') } %} {% endif %} {% include 'Zk2AdminPanelBundle:AdminPanel:adminList.html.twig' with { 'items': items, 'results': results, 'Zk2NumberFormat': zkNumberFormat } %} {% if is_new %} {% endif %} {% endblock %}