web-dev-qa-db-ja.com

インラインエンティティフォームでカスタム検証を処理する方法

Drupal8のインラインエンティティフォームを使用していますが、カスタム検証の記述に問題があります。いくつかのリンクが見つかりましたが、まったく役に立ちませんでした。誰もがこれを処理する方法を知っていますか?

1
Ninu

以下に示すモジュールでカスタム検証を行うには、インラインフォームの変更を使用する必要があります

/**
 * {@inheritdoc}
 *
 * Implements hook_form_alter().
 */
function module_inline_entity_form_entity_form_alter(&$entity_form, &$form_state) {

  // Added custom validation 
  if ($entity_form['#bundle'] == 'bundle_name') {
    $entity_form['#element_validate'][] = '_custom_validate_function';
  }
}

そして、以下のようにその検証を実装します。

/**
 * Custom validation.
 */
function _custom_validate_function(&$form, FormStateInterface $form_state) {

 $triggering_element = $form_state->getTriggeringElement();
 $values = $form_state->getValues();
 // or you can use $form_state->getValue('field_name')
 // Validate your functionality

 // Set Error for form
 $form_state->setError($form, t("message"));
 // Note: $name may be unknown in $form_state and
 // $form_state->setErrorByName($name, $message) may suppress the error message.
 // hence use above $form_state->setError()
}
3
Milind