10

Sonata 管理バンドルの編集ページでフォーム フィールドのレンダリングをカスタマイズして、 フィールドのテキスト コンテンツを使用するアプレットを含めたいと考えています。

configureFormFieldsadmin クラスの関数を編集する必要があることはわかっていますが、次の 3 つのことを知っておく必要があります。

  • フィールド フォーム テンプレートを提供するための構文は何ですか
  • テンプレートファイルを置く場所 (どのディレクトリ)
  • テンプレートがどのように見える必要があるか。
4

3 に答える 3

24

解決策を見つけた

私がやったことは次のとおりです。

  1. フィールド タイプを作成しました。myfieldTypeで myCompany\myBundle\Form\Type\myfieldType.phpと呼びましょう。

    namespace myCompany\myBundle\Form\Type;
    
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    
    class myfieldType extends AbstractType
    {
    
        public function getParent()
        {
            return 'text';
        }
    
        public function getName()
        {
            return 'myfield';
        }
    }
    
  2. app/config/services.yml に Type を登録しました

    myCompany.myBundle.form.type.myfield:
        class: myCompany\myBundle\Form\Type\myfieldType
        tags:
            - { name: form.type, alias: myfield }
    
  3. 私の myentityAdmin クラスでは、

     protected function configureFormFields(FormMapper $formMapper)
     {
         $formMapper
         ->add('myfieldname', 'myfield')
         ...
     }
    

    public function getFormTheme() {
        return array('myCompanymyBundle:Admin:myfield_edit.html.twig');
    }
    

    およびテンプレート:

    {# src/mycompany/myBundle/Resources/views/Form/myfield_edit.html.twig #}
    {% block myfield_widget %}
        {% spaceless %}
            {{ block('textarea_widget') }}
        {% endspaceless %}
    {% endblock %}
    

そして今、小枝変数「値」でフォームフィールド値にアクセスできます!

とても簡単です...あなたがそれを手に入れたとき。

于 2013-01-07T15:53:21.010 に答える
5

services.yml ファイルで、編集アクションのテンプレートを定義します。

app.admin.product:
    class: AppBundle\Admin\ProductAdmin
    arguments: [~, AppBundle\Entity\Product, AppBundle:Admin\Product]
    tags:
        - {name: sonata.admin, manager_type: orm, group: Products, label: Products}
    calls:
        - [ setTemplate, [edit, AppBundle:Product:edit.html.twig]]

そのテンプレートでは、フォームのフィールドのテンプレートをオーバーライドできます。

{% extends 'SonataAdminBundle:CRUD:base_edit.html.twig' %}

{% form_theme form.selectall 'AppBundle:Form:selectall.html.twig' %}
{% form_theme form.Country 'AppBundle:Form:country.html.twig' %}

次に、私のテンプレートは次のようになります。

{% block form_row %}
<div class="form-group">
{{ form_label(form) }}
{% set c = 0 %}
{% for i in form %}
    {% set c = c+1 %}
    {% if (c == 1) %}
        <div style="float: left; width: 20%;">
    {% endif%}
    {{ form_row(i) }}
    {% if ((c == 60) or (form|length == loop.index)) %}
        </div>
        {% set c = 0 %}
    {% endif%}
{% endfor %}
</div>
{% endblock form_row %}

この場合、私の国のチェック ボックスは、要素のリスト全体を含む 1 つの列ではなく、60 要素の列に表示されます。

これが他の誰かに役立つことを願っています。

于 2015-05-25T16:03:24.613 に答える