CiviCRMフォーム名はどのように定義されていますか(civicrm_validateForm)?

私は hook_civicrm_validateForm
にフックすることで、さまざまなCiviCRMフォーム(プロファイルフォームと投稿ページ内のフォーム)でフォーム検証を実行しようとしています。

私のPHPコードでは、私は適切な検証機能を実行できるように異なるフォームを区別したいと思います。 CiviCRMのドキュメントによると、これは $
formName
パラメータを使用します。

デバッグ中に、使用している投稿ページに $ formName
CRM_Contribute_Form_Contribution_Main
が含まれていることがわかりました。プロファイルフォームの場合、 $ formName
CRM_Profile_Form_Edit です。

フォームの名前がどのように定義されているかを調べる方法はありますか?もしそうなら、CiviCRMはカスタムフォーム名でフォームを割り当てることをサポートしていますか?

ベストアンサー

原則として名前はファイルに基づいているため、CRM/Contact/Form/Contact.phpというフォームはCRM_Contact_Form_Contactになります。

Firebug、Firefox、またはChromeでフォームを検査すると、AFAIKフォームの名前は常にコメントになります。

場合によっては、フォームはページから呼び出されます(投稿ページなど)。これはちょっと調べにくいですが、私はいつも拡張機能で$
formNameパラメータを記録してプロセス中にどのフォームが呼び出されたかを知るためのポストフックを行います。

AFAIKでは、カスタマイズされたフォームがvalidateFormフックでも使用可能であることを確認するために、フォームフックへの呼び出しを含める必要があります(下記参照)。しかし、親CRM_Core_Formがそれを処理しておらず、あなたのカスタマイズされたフォーム名を確かに確認できるのであれば、まず試してみます。

    CRM_Utils_Hook::validateForm(
  get_class($this),
  $this->_submitValues,
  $this->_submitFiles,
  $this,
  $hookErrors
);

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です