2016-05-26 4 views
0

drupal_process_statesという条件フィールドをいくつか定義しましたが、ラジオボタンの値が「投稿」の場合にのみ表示して検証する必要があります。 '不可視'と '無効'のプロパティで動作しますが、 'オプション'プロパティでは機能しません。フォームを送信することはできますが、これらのフィールドが必要であることを示すバックエンドの検証では失敗します。ここにフォームの変更フックの私のコードです:drupal_process_statesでオプションのDrupal 8が機能しない

$states_when_delivery_is_post = array(
    'disabled' => array(
     ':input[name="field_delivery_way"]' => array('value' => 'email'), 
    ), 
    'optional' => array(
     ':input[name="field_delivery_way"]' => array('value' => 'email'), 
    ), 
    'invisible' => array(
     ':input[name="field_delivery_way"]' => array('value' => 'email'), 
    ), 
); 

if (isset($form['field_country'])) { 
    $form['field_country']['#states'] = $states_when_delivery_is_post; 
} 

すべてのアイデア?

答えて

1

状態はフロントエンド機能のみを提供するため、バックエンドルールを自分で実装する必要があります。例えば、配信方法は、電子メールの場合は私が必要とするアドレスフィールドを必要としないので、私はそれらのアドレスフィールドのエラーをクリアしています:

function module_name_form_name_validation(&$form, \Drupal\Core\Form\FormStateInterface $form_state) { 

if ($form_state->getValue('field_delivery_way')[0]['value'] == 'email') { 
    $errors = $form_state->getErrors(); 
    $conditional_fields = ['field_city][0][value', 'field_house_number][0][value', 'field_postcode][0][value', 'field_street][0][value', 'field_country']; 
    $form_state->clearErrors(); 
    foreach ($errors as $element => $error) { 
     if (!in_array($element, $conditional_fields)) { 
      $form_state->setErrorByName($element, $error); 
     } 
    } 
} 

}

関連する問題