답변:
$form_state
양식 제출 핸들러 또는 양식 유효성 검증 핸들러에 전달 된 인수 중 하나입니다. 주요 사용법은 사용자가 입력 한 값을 형식으로 검색하는 것입니다 ( $form_state['values']
) 의 내용 참조 ). 그러나 다른 목적으로 사용할 수있는 다른 값이 포함되어 있습니다. drupal_build_form ()에
대한 설명서 에는 해당 배열에 포함 된 다른 값 목록이 포함되어 있으며 여기에는 다음 값이 포함됩니다.
- 재 구축 : 일반적으로 전체 양식 처리가 완료되고 제출 핸들러가 실행 된 후 양식이 완료된 것으로 간주되며 drupal_redirect_form ()은 GET 요청을 사용하여 사용자를 새 페이지로 리디렉션하므로 브라우저 새로 고침이 다시 제출되지 않습니다. 양식). 그러나 'rebuild'가 TRUE로 설정된 경우 새 양식의 복사본이 즉시 리디렉션되어 브라우저 대신 빌드되어 브라우저로 전송됩니다. 마법사 및 확인 양식과 같은 다단계 양식에 사용됩니다. 일반적으로
$form_state['rebuild']
제출 핸들러는 양식이 수행되는지 또는 다른 단계가 필요한지를 판별하는 제출 핸들러 내의 논리이므로 일반적으로 제출 핸들러에 의해 설정됩니다. 그러나 유효성 검증 핸들러는$form_state['rebuild']
유효성 검증 오류가없는 경우에도 양식 처리가 제출 핸들러를 무시하고 양식을 재 빌드하도록 이미 설정 되어있을 수 있습니다.- 리디렉션 : 제출시 양식을 리디렉션하는 데 사용됩니다. 도착 URL이 포함 된 문자열이거나와 호환되는 인수 배열 일 수 있습니다
drupal_goto()
. 자세한 내용drupal_redirect_form()
은 참조하십시오 .- 캐시 :
TRUE
원본으로 설정하면 처리되지 않은 양식 구조가 캐시되므로 전체 양식을 캐시에서 다시 작성할 수 있습니다. 일반적인 양식 워크 플로에는 두 가지 페이지 요청이 있습니다. 먼저, 사용자가 작성하기 위해 양식이 작성되고 렌더링됩니다. 그런 다음 사용자가 양식을 작성하여 제출하여 양식을 작성하고 처리해야하는 두 번째 페이지 요청을 트리거합니다. 기본적으로,$form
그리고$form_state
이러한 페이지 요청의 각시 처음부터 내장되어 있습니다. 초기 페이지 요청에서 제출을 처리하는 요청까지$form
및$form_state
변수 를 유지해야하는 경우가 종종 있습니다. 이를 위해 'cache'를 TRUE로 설정할 수 있습니다. 눈에 띄는 예는 Ajax 지원 양식입니다.ajax_process_form()
#ajax 속성을 가진 요소를 포함하는 모든 양식에 대해 양식 캐싱을 사용합니다. (아약스 핸들러는 이렇게 캐시 된 버전에 의존해야, 양식 자체를 구축 할 수있는 방법이 없습니다.)의 지속성주의$form
와$form_state
관계없이 값은 '다시'플래그 세트를 가진 (다단계) 형태의 자동 발생을 '은닉처'.- storage :
$form_state['storage']
는 특별한 키가 아니며 Form API에서 특별한 지원이 제공되지 않습니다. 전통적으로 제출, 유효성 검증 및 양식 빌더 기능 간 통신을 위해 특히 특정 단계 스타일 양식으로 애플리케이션 특정 데이터가 저장된 위치였습니다. 양식 구현은$form_state
이러한 종류의 저장소에 대해 (여기에 나열된 키 및 Form API 내부에서 사용하는 다른 예약 된 키 이외 의) 키를 사용할 수 있습니다 . 선택한 키가 Form API 또는 다른 모듈에서 사용하는 키와 충돌하지 않도록하는 권장 방법은 모듈 이름을 키 이름 또는 키 이름의 접두어로 사용하는 것입니다. 예를 들어, 노드 모듈은$form_state['node']
노드 편집 양식에서 편집중인 노드에 대한 정보를 저장하며,이 정보는 "미리보기"단추를 연속해서 클릭 할 때뿐만 아니라 "저장"단추를 클릭 할 때에도 계속 사용할 수 있습니다.
$form_state
인수로 받는 다른 함수 는 hook_form_alter () 및 hook_form_FORM_ID_alter () 입니다.
해당 인수를 사용하는 코드의 예로 다음 코드가 포함 된 comment_form_submit ()을 볼 수 있습니다 .
function comment_form_submit($form, &$form_state) {
$node = node_load($form_state['values']['nid']);
$comment = comment_form_submit_build_comment($form, $form_state);
if (user_access('post comments') && (user_access('administer comments') || $node->comment == COMMENT_NODE_OPEN)) {
// Save the anonymous user information to a cookie for reuse.
if (user_is_anonymous()) {
user_cookie_save(array_intersect_key($form_state['values'], array_flip(array('name', 'mail', 'homepage'))));
}
comment_save($comment);
$form_state['values']['cid'] = $comment->cid;
// Add an entry to the watchdog log.
watchdog('content', 'Comment posted: %subject.', array('%subject' => $comment->subject), WATCHDOG_NOTICE, l(t('view'), 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)));
// Explain the approval queue if necessary.
if ($comment->status == COMMENT_NOT_PUBLISHED) {
if (!user_access('administer comments')) {
drupal_set_message(t('Your comment has been queued for review by site administrators and will be published after approval.'));
}
}
else {
drupal_set_message(t('Your comment has been posted.'));
}
$query = array();
// Find the current display page for this comment.
$page = comment_get_display_page($comment->cid, $node->type);
if ($page > 0) {
$query['page'] = $page;
}
// Redirect to the newly posted comment.
$redirect = array('node/' . $node->nid, array(
'query' => $query,
'fragment' => 'comment-' . $comment->cid,
));
}
else {
watchdog('content', 'Comment: unauthorized comment submitted or comment submitted to a closed post %subject.', array('%subject' => $comment->subject), WATCHDOG_WARNING);
drupal_set_message(t('Comment: unauthorized comment submitted or comment submitted to a closed post %subject.', array('%subject' => $comment->subject)), 'error');
// Redirect the user to the node they are commenting on.
$redirect = 'node/' . $node->nid;
}
$form_state['redirect'] = $redirect;
// Clear the block and page caches so that anonymous users see the comment
// they have posted.
cache_clear_all();
}
$form_state['values']
포함 된 내용을 이해하려면 comment_form ()$form
에 추가 된 값을 확인해야합니다 . 예를 들어, 이 포함되어 있기 때문에 포함되어 있습니다 . 일반적으로 양식 필드 인 경우을 포함합니다 .$form_state
$form_state['values']['name']
$form
$form['author']['name']
$form['field']
$form_state
$form_state['values']['field']
$form
배열 의 일부를 반환합니다 . 의 내용을 확인하는 양식 작성기입니다 $form_state
. 이것이 올바른 일을하는 모듈로 구현 된 모든 AJAX 콜백에서 본 것입니다.