Sonata 管理バンドルの編集ページでフォーム フィールドのレンダリングをカスタマイズして、 フィールドのテキスト コンテンツを使用するアプレットを含めたいと考えています。
configureFormFields
admin クラスの関数を編集する必要があることはわかっていますが、次の 3 つのことを知っておく必要があります。
- フィールド フォーム テンプレートを提供するための構文は何ですか
- テンプレートファイルを置く場所 (どのディレクトリ)
- テンプレートがどのように見える必要があるか。
Sonata 管理バンドルの編集ページでフォーム フィールドのレンダリングをカスタマイズして、 フィールドのテキスト コンテンツを使用するアプレットを含めたいと考えています。
configureFormFields
admin クラスの関数を編集する必要があることはわかっていますが、次の 3 つのことを知っておく必要があります。
解決策を見つけた
私がやったことは次のとおりです。
フィールド タイプを作成しました。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';
}
}
app/config/services.yml に Type を登録しました
myCompany.myBundle.form.type.myfield:
class: myCompany\myBundle\Form\Type\myfieldType
tags:
- { name: form.type, alias: myfield }
私の 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 %}
そして今、小枝変数「値」でフォームフィールド値にアクセスできます!
とても簡単です...あなたがそれを手に入れたとき。
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 要素の列に表示されます。
これが他の誰かに役立つことを願っています。