ユーザーアカウント作成フォームの名前フィールドのラベルとフィールドの説明を変更しようとしています。私はコーディングに慣れていないので、これは簡単な作業だと思いました。
カスタムモジュールが有効になっていて、キャッシュをクリアしましたが、変更が表示されません。これが私のコードです。さまざまなバリエーションと検索を試しましたが、これが機能しているという兆候は一度も見られません。
<?php
/**
* @file
* Contains mymodule.module.
*/
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_form_FORM_ID_alter() on behalf of mymodule.module.
* @see \Array method Array at Array
*/
function mymodule_form_account_alter(&$form, FormStateInterface $form_state, $form_id) {
// print_r($form); die;
// ksm($form_id);
if ($form_id == 'user_register_form') {
// print_r($form); die;
// kint($form_id);
$form['name'] = array(
'#type' => 'textfield',
'#title' => $this->t('First and last name'),
'#maxlength' => USERNAME_MAX_LENGTH,
'#description' => $this->t("Rewrite this about spaces, periods (.), hyphens (-) and apostrophes (')."),
);
}
drupal_set_message('mymodule_form_account_alter() executed.');
}
これが正しいコードです:
/**
* Implements hook_form_FORM_ID_alter().
*/
function <your_module>_form_user_register_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$form['account']['name']['#title'] = t('First and last name');
$form['account']['name']['#description'] = t("Rewrite this about spaces, periods (.), hyphens (-) and apostrophes (').");
}
お気軽に:)お楽しみください!
ユーザー登録フォームに変更が表示されない理由は、user_register_formフォームのhook_form_FORM_ID_alter()
の名前が間違っているためです。mymodule_form_account_alter(&$form, FormStateInterface $form_state, $form_id)
(マシン名がmymoduleのモジュールに定義されていると想定)ではなく、mymodule_form_user_registration_form_alter(&$form, FormStateInterface $form_state, $form_id)
。まだマシン名がmymodule;であるモジュールに対してフックが定義されていると想定しています。たとえば、マシン名がmy_custom_moduleであるモジュールに対してフックが定義されている場合、そのフックはmy_custom_module_form_user_registration_form_alter(&$form, FormStateInterface $form_state, $form_id)
として定義する必要があります。
フック名を修正しましたが、表示しているコードにはまだエラーがあります。
if ($form_id == 'user_register_form')
のような行は必要ありません。 hook_form_FORM_ID_alter()
を実装しているので、どのフォームを呼び出すかをすでにDrupalに伝えているため、どのフォームが呼び出されるかを確認する必要はありません。
フォーム要素の一部のプロパティを変更する必要がある場合は、$form['name'] = array( /* .... */);
を使用しないでください。これにより、そのフォーム要素のすべてのプロパティが削除され、only追加したプロパティが追加されます配列に。
正しいコードは次のようになります。
function mymodule_form_user_register_form_alter(&$form, FormStateInterface $form_state, $form_id) {
$form['name']['#title'] = $this->t('First and last name');
$form['name']['#description'] = $this->t("Rewrite this about spaces, periods (.), hyphens (-) and apostrophes (').");
}
次のことに注意してください。
$form_id
はフックに渡されるパラメーターの1つですが、フックがどのフォームで呼び出されるかを理解する必要はありません。実際、フォームIDを別の文字列に連結する必要がある場合を除いて、hook_form_FORM_ID_alter()
がそのパラメーターを使用する理由は考えられません。 (その場合、$form_id . 'another string'
を使用します。)
フックが呼び出されたときにテストしている場合は、drupal_set_message()
(これも非推奨の関数です)を使用しないでください。 Drupalロガーを使用します。たとえば、\Drupal::logger('mymodule')->notice('mymodule_form_account_alter() executed.');
のような行を使用します。