답변:
에서를 사용해야 triggering_element합니다 $form_state['triggering_element'].
모범 사례는 #name버튼 의 속성 을 정의하는 것이므로이 값을에서 사용할 수 있습니다 triggering_element.
예를 들면 다음과 같습니다.
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
이 속성 triggering_element을 정의하지 않으면 버튼 #value(사용자가 읽을 수있는 텍스트)이 유지되지만 다른 모듈이이 값을 변경하거나 지역화에 의해 변경 될 수 있으므로 권장하지 않습니다.
당신도 사용할 수 $form_state['clicked_button']있지만 이것은 더 이상 사용되지 않습니다 .
drupal_build_form 함수 문서 페이지 에서 자세한 정보를 읽을 수 있습니다 .
$form_state['clicked_button']['#value'] 양식에서 어떤 버튼을 클릭했는지 알려줍니다.
$form_state['clicked_button']['#value']:)
$form_stateDrupal 6에서 수행 한 값 과 Drupal7에서 동일한 값을 비교하십시오.
if($form_state['values']['ok'] == $form_state]['clicked_button']['#value']){
//Process if OK is pressed
}else if($form_state['values']['cancel'] == $form_state]['clicked_button']['#value']) {
//Process if Cancel is pressed
}
다음과 같이 #name속성으로 버튼 이름을 지정하십시오 .
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
다음을 사용하십시오.
$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
여전히 트리거 된 이벤트에 액세스하는 방법을 알아 내려는 사람들을 위해 여기 Drupal 8 솔루션이 있습니다.
$form_state->getTriggeringElement()
트리거 제출 요소의 배열을 리턴합니다. 호출 된 마크 업을 추가 #name하면 다음과 같은 방법으로 액세스 할 수 있습니다.
$button_clicked = $form_state->getTriggeringElement()['#name']
이 변경의 이유 FormStateInterface는 이제 readOnly확장하는 클래스 만 FormStateInterface변수에 액세스 할 수 있는 파일 이기 때문 입니다 . 따라서 getTriggeringElement()변수에 액세스하려면 접근 자 메서드를 사용해야 합니다.
드루팔 8.6.7
아래와 같은 버튼을 만듭니다.
$form['my_button'] = [
'#type' => 'button',
'#value' => t('Custom Button'),
'#name' => t('customButton'),
'#weight' => 0,
'#attributes' => [
'class' => ['populate-bib-button', 'btn', 'btn-primary'],
],
];
제출 기능에서 아래 코드와 같은 버튼 이름을 가져옵니다.
$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton
비교는 다음과 같이 수행 할 수 있습니다
if ($input['_triggering_element_name'] == 'customButton') {
// Do something.
}
# Drupal8
hook_submit()또는 양식 제출 처리기에 대해 이야기하고 있습니까? 양식 제출 핸들러는의 구현이 아닙니다hook_submit().