KcaptchaプラグインでさくっとCaptcha実装

Kcaptchaプラグインとは

このプラグインは、KCAPTCHAをものすごい簡単に使おうという趣旨のもと作られました。
単純な使い方ではほんとにあっという間に使うことが可能になります。


hiromi2424/CakePHP-Kcaptcha-Plugin - GitHub
上記でこのプラグインをMITライセンスで公開しています。


以下にREADMEの抜粋を訳したものを載せておきます。

インストール

pluginsディレクトリで、

git clone git://github.com/hiromi2424/CakePHP-Kcaptcha-Plugin.git kcaptcha

またはリポジトリのカレントディレクトリで、

git submodule add git://github.com/hiromi2424/CakePHP-Kcaptcha-Plugin.git plugins/kcaptcha

とします。または、ダウンロードして手動で設置してください。

アプリケーションのvendorsディレクトリにkcaptchaを設置することによりそっちを参照することも可能です。
kcaptchaのカスタマイズした設定があるなら、この方法をとってください。

使い方

コントローラにCaptchaコンポーネントを設置してください:

<?php
class PostsController extends AppController {

	public $components = array(
		'Kcaptcha.Captcha',
	);
}

フォームでコンポーネントによって自動的にセットされるCaptchaヘルパーを使ってください:

<?php
	echo $this->Captcha->render();
	echo $this->Form->input('captcha');
?>

単純にこれで終わりです!これでPostモデルはcaptchaのためのユーザの入力のバリデーションを行うことでしょう。
更なるオプションやカスタマイズ機能については、以下のAPIリファレンスを見てください。

APIリファレンス

Captchaコンポーネント

設定:

  • $sessionKey - string captchaに用いるセッションのキー。デフォルトは'Kcaptcha.answer'です。これを変更すると、手動でrender()を使うアクションをコントローラに作らなければなりません。
  • $model - string バリデーションで使うモデル名。デフォルトはコントローラの$modelClassです。
  • $setupHelper - boolean Captchaヘルパーをコントローラに自動的に追加するかどうか。デフォルトはtrueです。
  • $autoSetAnswer - boolean モデルにcaptchaの答えを自動的にセットするかどうか。デフォルトはtrueです。

メソッド:

  • render() - captchaレンダリングする。captchaの画像と、そのヘッダーを出力します。
  • clearSession() - captchaのためのセッションデータを破棄します。これを呼ぶ必要はありませんが、消したいときにこれを使うことができます。
Captchableビヘイビア

設定:

  • $answerProperty - string captchaの答えが自動的にセットされるモデルのプロパティ名。デフォルトは'captchaAnswer'です。
  • $field - string バリデーションに使うフィールド名。the field to vlidate. デフォルトは'captcha'です。
  • $rule - string バリデーションに使うルールセット名。デフォルトは'captcha'です。
  • $convertKana - boolean trueのとき、全角の入力を半角に変換します。デフォルトはtrueです。
  • $trim - mixed 入力の前後の空白を除去するかどうか、または空白の正規表現文字列。デフォルトはマルチバイトの空白の正規表現(PCRE)です。
  • $required - boolean キャプチャの答えが必須かどうか。requireCaptcha()を使って切り替えることも可能です。デフォルトはtrueです。
  • $setupValidation - boolean 基本的なcaptchaのためのバリデーションセットをモデルにセットするかどうか。デフォルトはtrueです。

メソッド:

  • setupCaptchaValidation() - 基本的なcaptchaのためのバリデーションセットをモデルにセットします。 $setupValidationプロパティを見てください。
  • setCaptchaAnswer() - captchaの答えをセットする。Captchaコンポーネントstartup()で使用されます。
  • requireCaptcha($yes = boolean) - captchaの答えが必要かどうかを決定します。
  • validCaptcha($input) - captchaの答えを検証(バリデーション)します。
Captchaヘルパー

render([$url])メソッドのみが存在します。
これはプラグインCaptchaコントローラのrender_captchaアクションがソースになる、<img>タグを吐き出します。
アプリケーションのコントローラのアクションでCaptchaComponent::render()を用いて手動でレンダリングをしているのなら、(Router::url()に渡す形で)そのURL表現を指定する必要があります。

最後に

最近はreCAPTCHAがよく使われるみたいですが、KCAPTCHAも昔からよく使われているもので、単純にcaptchaの機能を実装してしまいたい時に非常に便利です。


ご存知の方もいらっしゃるとは思いますが、Bakeryの記事で基本的なセットアップが載っています。:
Integrate CakePHP with Kcaptcha | The Bakery, Everything CakePHP

しかし、モデルのバリデーションでやるとなると、より多くのセットアップが必要になります。
これはそれら一連の動きを纏めたもので、非常に簡単にセットアップができるようになります。


APIリファレンスまで載せて、非常に長くなってしまいましたが、是非使ってみてください!