2011年02月03日

[CakePHP]reCAPTCHA Plugin を作った。

前回、 reCAPTCHA 入力値の判定を CakePHP の Model 内での Validation 時に行う話を書きました。それならばいっそのこと Plugin 化してしまおう、ということで作りました。reCAPTCHA API 用 PHP ライブラリを CakePHP から簡単に使おうというものです。
tbsmcd/recaptcha_plugin - GitHub
使い方は README にも書いてありますが、

1. reCAPTCHA キーを取得。
こちらからサインインして取得します。PUBLIC と PRIVATE があるので両方ともメモってください。

2. ライブラリファイルを設置
こちらからダウンロード・解凍し、recaptcha_plugin/vendors/recaptchalib.php となるように設置してください。

3. 設定ファイルの記述
1 で取得したキーを recaptcha_plugin/config/key.php に記述します。
	$config = array(
		'Recaptcha' => array(
			'Public'  => 'YOUR_RECAPTCHA_PUBLIC_KEY',
			'Private' => 'YOUR_RECAPTCHA_PRIVATE_KEY',
		),
	);
key.php.default をコピーしてもらえばいいと思います。

4. コントローラへの記述
reCAPTHCA を使用するフォームのコントローラに
	public $components = array('RecaptchaPlugin.Recaptcha');
	public $helpers = array('RecaptchaPlugin.Recaptcha');
のように記述します。

5. ヘルパーへの記述
reCAPTCHA を使用する form 内に
	echo $this->Recaptcha->show();  // reCAPTCHA 本体の出力
	echo $this->Recaptcha->error(); // Validation メッセージ出力
このように記述します。Recaptcha->show() はデフォルトでテーマ 'red' を使用しますが、show('white') のような形でテーマを指定することが出来ます。使用できるテーマは

red
reCAPTCHA_Red.png
white
reCAPTCHA_White.png
blackglass
reCAPTCHA_Black.png
clean
reCAPTCHA_Clean.png
の4種類です。

これは何をしているのか?
→基本的には前回の記事と同じく、 reCAPTCHA 用の Validation を追加しています。
多少変わった点といえば、 ValidationBehavior で
	function beforeValidate(&$model) {
		$model->validate['recaptcha_response_field'] = array(
			'checkRecaptcha' => array(
				'rule' => array('checkRecaptcha', 'recaptcha_challenge_field'),
				'message' => 'You did not enter the words correctly. Please try again.',
			),
		);
	}
という形でフックして Validation を追加している点と RecaptchaComponent で
	function startup(&$controller) {
		$modelClass = $controller->modelClass;
		if (!empty($controller->params['form']['recaptcha_challenge_field']) && !empty($controller->params['form']['recaptcha_response_field'])) {
			$controller->data[$modelClass]['recaptcha_challenge_field'] = $controller->params['form']['recaptcha_challenge_field'];
			$controller->data[$modelClass]['recaptcha_response_field'] = $controller->params['form']['recaptcha_response_field'];
		}

		$controller->$modelClass->Behaviors->attach('RecaptchaPlugin.Validation');

	}
というように Model にフォーム値を渡しつつ先の ValidationBehavior を指定してる点でしょうか。

さほど分量があるものでもないしそもそも簡単に使えるものなのですが、多少気の利いたプラグインとして役立てばいいかな、と思っています。


posted by tbsmcd at 22:41| Comment(1) | TrackBack(0) | 技術 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
多く内容、これらの情报が助けてくれる、考慮しなければならない一部の多くのものを訴えるが映画の再だった。
Posted by スーパーコピーブランド at 2012年03月26日 10:47
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。