drupal7之學習在已存在的form表單中增長自定義驗證(Learn how to add custom validation to an existing Drupal form)

注:原文連接:http://befused.com/drupal/form-validation(翻譯水平有限,還望海涵)
start:
表單驗證是web系統中必不可少的一部分,你須要確保用戶輸入的信息是不是可取的,若是不可取會反饋錯誤信息
感謝Drupal鉤子,你能夠簡單的在任何一個表單中增長驗證,即便你並無建立這個表單。在這個教程裏面,你會學習怎樣用驗證函數去驗證一篇文章表單,增長一篇文章的的地址在這裏 node/add/article
示例你要確保用戶不能增長這個標題打的文章:」 the quick fox jumped over the lazy dog」,若是寫下了這個標題,則返回一個錯誤信息。
在這個教程中,你可能須要下載和開啓一個叫devel的開發神器來打印消息(dpm函數)。php

Alter the form

增長一個新的驗證函數,你須要去alter下這個表單(至於爲何我不細講了,就是重寫下表單)若是看不懂看完這裏應該就會了(
○17天開始模塊開發(http://befused.com/drupal/form-alter
○23天開始模塊開發。(http://befused.com/drupal/first-module

OK,咱們開始吧 node

「`
1. function starting_drupal_dev_form_alter(&form, &form_state, form_id) {  
2.    if (
form_id == ‘article_node_form’) {
3. dpm($form[‘#validate’]);
4. }
5. } web

「`從上面代碼能夠看到,咱們第一步判斷form的ID是不是acticle_node_form,而後用dpm($form[‘#validate’]),。它列出了全部的驗證函數。
當你點擊進/node/add/acticle頁面,你能夠看見node_form_validate(),
這裏寫圖片描述數組

增長一個驗證處理的handler(這個詞一會兒不知道怎麼翻譯了)

你須要增長一個驗證函數到$form[‘#validate’]這個數組裏面
函數名:’ starting_drupal_dev_form_validate’markdown

1. function starting_drupal_dev_form_alter(&$form, &$form_state, $form_id) {
2. if ($form_id == 'article_node_form') {
3. $form['#validate'][] = 'starting_drupal_dev_form_validate';
4. dpm($form['#validate']);
5. }
6. } 

```你如今能夠在打印機上看見這裏有兩個驗證handlers.核心的 node_form_validate是其中的一個![這裏寫圖片描述](http://img.blog.csdn.net/20150406223756947)
建立一個驗證函數:
如今你須要增長一個回調函數starting_drupal_dev_form_validate()





<div class="se-preview-section-delimiter"></div>
  1. function starting_drupal_dev_form_validate(form, &form_state) {

    1. }
      `當表單被提交後,這個表單的值存放在$form_state裏面,你能夠打印出來看一看
這裏寫代碼片
1.  function starting_drupal_dev_form_validate($form, &$form_state) {
2.   
3.  } 
``當表單被提交後,這個表單的值存放在$form_state裏面,你能夠打印出來看一看`
  1. function starting_drupal_dev_form_validate(form, &form_state) {
  2. dpm($form_state);
  3. }

這裏寫圖片描
找到你須要的字段。$form_state[‘values’][’title’]
若是這個值爲「the quick fox jumped over the lazy dog」就返回一個錯誤
這裏寫圖片描述函數

1. function starting_drupal_dev_form_validate($form, &$form_state) {
2. if ($form_state['values']['title'] == 'the quick fox jumped over the lazy dog') {
3. form_set_error('title', t('You have added an invalid title.'));
4. }
5. }

**```咱們先分析下上面的函數**

if ($form_state[‘values’][‘title’] == ‘the quick fox jumped over the lazy dog)
這裏是一個簡單的判斷函數
若是它的值是the quick fox jumped over the lazy dog它將返回真
而後裏面的代碼將會被執行學習

form_set_error('title', t('You are not allowed to use "the quick fox jumped over the lazy dog" as a title.')```

![這裏寫圖片描述](http://img.blog.csdn.net/20150406224134945)

驗證多種標題 ------
如今咱們來試着用兩個值進行驗證。第二個值就取:「birds of a feather flock together」
  1. function starting_drupal_dev_form_validate(form, &form_state) {
  2. $invalid_titles = array(‘the quick fox jumped over the lazy dog’, ‘birds of a feather flock together’);
  3. if (in_array( formstate[values][title], invalid_titles)) {
  4. form_set_error(‘title’, t(‘You have added an invalid title.’));
  5. }
  6. }
拆分來看看吧

$invalid_titles = array(‘the quick fox jumped over the lazy dog’, ‘birds of a feather flock together’);ui

首先,咱們建立了一個須要判斷標題的數組

if (in_array( formstate[values][title], invalid_titles)) { .. }
「`
接下來咱們判斷標題值是否等於數組裏面任何一個成員spa

OK,教程到此結束,相信你應該也會使用驗證函數了吧,
沒錯,這就是一個簡單的驗證函數。.net

相關文章
相關標籤/搜索