単純なクラスフォーム「MyformtestForm」を使用して、単純なモジュール「myformtest」を生成します。フォームに別のテーマを使用したい。
私はこの素晴らしい チュートリアル に従いました。 「myformtest.module」に「_theme_suggestions_alter」フックを追加し、twigデバッグをアクティブにして、フォームページをロードしました。
私の「提案テーマ」が存在し、その名前は「form--myformtest-form.html.twig」です。次に、私のモジュールディレクトリで:
twigファイルに、この単純なコードを追加しました(drupal/core/themes/classy/templates/form/form.html.twigからコピーして、h1 html要素をオーバーライド)
<h1>TEST</h1>
<form{{ attributes }}>
{{ children }}
</form>
キャッシュをクリアし(drush cr)、フォームページを再読み込みしました。しかし、html要素h1( "TEST")は表示されません!私の間違いはどこですか?
[〜#〜] up [〜#〜]
やったよ ! .moduleファイルにフックテーマを追加しました。
function myformtest_theme($existing, $type, $theme, $path)
{
return array(
'form__myformtest_form' => array(
'render element' => 'form',
'template' => 'form--myformtest-form',
),
);
}
だが.... !フォームページを読み込むと、html要素h1 "test"が表示されますが、フォームは表示されません:/私の.twigファイルがform.html.twigのデフォルトのテーマをオーバーライドすると思いました.
私は何か見落としてますか ?フォームが表示されないのはなぜですか、どうすれば修正できますか?そして、どのようにしてカスタム配列をフォームクラスのビルドメソッドから私のtwigテンプレートに渡すことができますか?
これが解決策です:
デフォルトのフォームtwig contentが機能しない理由(属性と子変数が機能しない理由)をコピーして貼り付けた理由がわかりません)
私はすべての利用可能なtwig変数をカスタムテンプレートから({{dump()}}を介して)ダンプしました。「要素」という名前の配列があることがわかりました。これとその作業を試しました!フォームが表示されます。
これは私のカスタムフォームテンプレートのコードです:
<h1>TEST</h1>
<form{{ element }}></form>
同様の問題が発生しています。そして、次のように解決しました。
私のMYMODULE.module
ファイル:
function MYMODULE_theme($existing, $type, $theme, $path) {
return [
'mythemename' => [
'render element' => 'form',
'template' => 'my-template-name',
],
];
}
の中に $form
:
$form['#theme'] = 'mythemename';
そして最後にmy-template-name.html.twig
テンプレート:
<div class="someclass">
{{ form }}
</div>
フォーム要素にはすでにベーステンプレートがあります。
ベーステンプレートを上書きするには、テーマのテンプレートディレクトリにtwigファイルを追加する必要があります。
モジュールのテンプレートディレクトリは、ベーステンプレートを提供するために存在します。
Form.html.twigファイルの内容をカスタムテンプレートにコピーする必要があると思います。その後、カスタムテンプレートにさらに変更を加えることができます。このようにして、フォームがページにレンダリングされます。