モジュールがノードを検証するために実装する必要があるフックはhook_validate()
(モジュールがコンテンツタイプを実装する場合)とhook_nodeapi( 'validate')(他のすべてのモジュール用)であるため、他の方法はありません。これらのフックは$form
パラメーターを取得し、検証エラーが発生した場合にform_set_error()を呼び出すことになっています。
フォームにエラーが設定されているかどうかを確認する簡単な方法は、を使用することですform_get_errors()
。これは、form_set_error()
からも呼び出される関数であるすべてのエラーが設定された配列を返しますform_error()
。
複数のノードが検証される場合、form_set_error(NULL, '', TRUE)
before を呼び出してnode_validate()
からform_get_errors()
、エラーメッセージを含む配列から取得する必要があります。これが空の場合、エラーメッセージはありません。
form_set_error(NULL, '', TRUE);
// node_validate() call.
$errors = form_get_errors();
if (!empty($errors)) {
// Some module reported an error.
}
または、次のスニペットを使用して、呼び出し後にどのモジュールもエラーを報告していないことを確認できますnode_validate()
。
if (!empty($_SESSION['messages']['error'])) {
// Some module reported an error.
}
node_validate()
cronタスクから呼び出す前$_SESSION['messages']['error']
に、空の配列に設定する必要があります。このようにして、配列で報告されたエラーがノード検証フックによって引き起こされていることを確認します。
$_SESSION['messages']
drupal_set_message()
関数に渡されるメッセージを格納するためにから使用される変数です。
function drupal_set_message($message = NULL, $type = 'status', $repeat = TRUE) {
if ($message) {
if (!isset($_SESSION['messages'])) {
$_SESSION['messages'] = array();
}
if (!isset($_SESSION['messages'][$type])) {
$_SESSION['messages'][$type] = array();
}
// …
}
// …
}