Yanıtlar:
$form_state
form gönderme işleyicisine veya form doğrulama işleyicisine iletilen argümanlardan biridir; Başlıca kullanımı, kullanıcıdan içeriğe bakınız şeklinde girilen değerleri almaktır $form_state['values']
, ancak başka amaçlar için kullanılabilecek diğer değerleri içerir. Drupal_build_form ()
belgesinde, aşağıdakileri içeren, bu dizide bulunan diğer değerlerin listesi bulunur:
- yeniden oluşturma: Normalde, tüm form işlemleri tamamlandıktan ve gönderim işleyicileri çalıştıktan sonra, bir form yapılmış sayılır ve drupal_redirect_form () kullanıcıyı GET isteğini kullanarak yeni bir sayfaya yönlendirir (böylece bir tarayıcı yenilemesi yeniden gönderilmez) formu). Bununla birlikte, 'yeniden oluşturma' TRUE olarak ayarlanmışsa, formun yeni bir kopyası derhal oluşturulur ve yönlendirmek yerine tarayıcıya gönderilir. Bu, sihirbazlar ve onay formları gibi çok adımlı formlar için kullanılır. Normalde,
$form_state['rebuild']
bir gönderim işleyicisi tarafından belirlenir, çünkü genellikle bir form işleyicisinin içinde bir formun yapılıp yapılmayacağını veya başka bir adım gerektirip gerektirmediğini belirleyen bir gönderim işleyicisi içinde mantıktır. Bununla birlikte, bir doğrulama işleyicisi zaten$form_state['rebuild']
, form işleminin gönderim işleyicilerini atlamasına ve doğrulama hataları olmasa bile formu yeniden oluşturmasına neden olacak şekilde ayarlanmış olabilir.- redirect: Gönderim sırasında formu yönlendirmek için kullanılır. Hedef URL'yi içeren bir dize veya uyumlu bir argüman dizisi olabilir
drupal_goto()
. Tümdrupal_redirect_form()
bilgiler için bakınız .- önbellek:
TRUE
Orijinaline ayarlanırsa , işlenmemiş form yapısı önbelleğe alınır ve bu da tüm formun önbellekten yeniden oluşturulmasına olanak tanır. Tipik bir form iş akışı, iki sayfa isteği içerir; ilk önce, kullanıcının doldurması için bir form oluşturulur ve oluşturulur. Ardından, kullanıcı formu doldurup gönderir ve formun oluşturulup işlenmesi gereken ikinci bir sayfa isteğini tetikler. Varsayılan olarak$form
ve$form_state
bu sayfa isteklerinin her biri sırasında sıfırdan oluşturulur. Genelde$form
ve$form_state
değişkenlerin ilk sayfa talebinden gönderimi işleyene devam etmesi gerekir veya istenir . 'önbellek' bunu yapmak için TRUE olarak ayarlanabilir. Öne çıkan bir örnek, içinde Ajax etkin bir formdur.ajax_process_form()
#ajax özelliğine sahip bir öğe içeren tüm formlar için form önbelleğe almayı sağlar. (Ajax işleyicisinin, formun kendisini oluşturmak için hiçbir yolu yoktur, bu nedenle önbelleğe alınmış sürüme dayanmalıdır.) Notun değeri ne olursa olsun, 'yeniden oluştur' bayrağının ayarlandığı (çok adımlı) formların kalıcılığını$form
ve$form_state
'cache'.- depolama:
$form_state['storage']
özel bir anahtar değildir ve Form API'sinde belirli bir destek sağlanmaz. Geleneğe göre, özellikle çok adımlı bir biçimde, gönderme, doğrulama ve form oluşturucu işlevleri arasındaki iletişim için uygulamaya özel verilerin depolandığı konumdu. Form uygulamaları,$form_state
bu tür bir depolama için içindeki (burada listelenen anahtarlar ve Form API içindekiler tarafından kullanılan diğer ayrılmış olanlar hariç ) herhangi bir anahtar kullanabilir . Seçilen anahtarın Form API'si veya diğer modüller tarafından kullanılanlarla çakışmadığından emin olmanın önerilen yolu, modül adını anahtar adı veya anahtar adı için önek olarak kullanmaktır. Örneğin, Node modülü kullanır$form_state['node']
Düğüm düzenleme formlarında, düzenlenmekte olan düğüm hakkındaki bilgileri saklamak için kullanılır ve bu bilgi "Önizleme" düğmesinin art arda tıklanmasının yanı sıra "Kaydet" düğmesinin tıklandığında da kullanılabilir.
$form_state
Argüman olarak elde edilen diğer işlevler , hook_form_alter () ve hook_form_FORM_ID_alter () 'dır .
Bu argümanı kullanan kodun bir örneği olarak , aşağıdaki kodu içeren comment_form_submit () 'e bakabilirsiniz :
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();
}
Ne olduğunu anlamak için $form_state['values']
içerir, sen eklenen değerlere bakmak gerekir $form
yılında comment_form () . Örneğin, $form_state
içerir $form_state['values']['name']
çünkü $form
içerir $form['author']['name']
. Genellikle, $form['field']
bir form alanı ise, $form_state
içerecektir $form_state['values']['field']
.
$form
dizinin bir bölümünü döndürür ; içeriğini kontrol eden form oluşturucu $form_state
. Doğru olanı yapan modüller tarafından uygulanan tüm AJAX geri aramalarında bu gördüm.