web-dev-qa-db-ja.com

カスタム登録twigテンプレート

カスタム登録を作成する最良の方法は何ですかtwigテンプレート?

私はフックを実装しました:

function THEMENAME_theme_suggestions_form_alter(array &$suggestions, array $variables) {
    $suggestions[] = 'form__' . $variables['element']['#form_id'];
}

Si私はフォームtwig formなどのテンプレートの提案を取得します--user-register-form.html.twig

次に、「要素」を使用して、必要なすべての値を呼び出すことができます。

{{ element.field_name }}

私の唯一の問題は、画像フィールドのajaxを使用したフィールド検証でエラーが発生することです。画像をアップロードすると、サーバーから画像サイズがphpの制限サイズを超えているというエラーメッセージが表示されます(これは明らかにそうではありません)。

だから私は{{ children }}in my twigテンプレートを正しく機能させるためのテンプレートです。唯一の悪い点は、{{children}}を呼び出すと、実際にフォーム全体が呼び出されることです......

私は何か間違ったことをしていますか?上記のものを達成するための最良の方法ですか?それは...ですか {{ children }}フォームを機能させるために呼び出す必要がありますか?

2
Aporie

単純なフォームの場合...

... {{ element }}の代わりに{{ children }}を使用してformテンプレートにテーマを設定できます。参照 作成方法twigでテンプレートファイルdrupalユーザーログインをカスタマイズするための8、プロファイルの編集、およびパスワードフォームを忘れた場合?

ただし、フォームが動作するために必要なすべてのフォーム要素とメタデータを含めることは難しいため、これが常に最良のアプローチであるとは限りません。

複雑なフォームの場合...

...完全なフォームではなく、内部フォーム要素のみをレンダリングする必要がある追加のテンプレートレベルを追加する方が簡単な場合があります。

/**
 * Implements hook_form_FORM_ID_alter() for \Drupal\user\RegisterForm.
 */
function mytheme_form_user_register_form_alter(&$form, FormStateInterface $form_state) {
  $form['#theme'] = 'user_register_form';
}

カスタムテンプレートはhook_themeに登録する必要があります。段階的な例については、 *。themeファイルから特定のフォーム要素をレンダリングする方法 を参照してください。

3
4k4