cakephperの日記(CakePHP, Laravel, PHP)


継続的WebセキュリティテストサービスVAddyを始めました!

2012-02-22

フォーム入力画面と確認画面で共通で使えるXFormヘルパーをCakePHP2.0対応しました

Cake1用に作っていたXformヘルパーをCake2.0対応しました。(CakePHP2.1.1でも問題なく動きました)

https://github.com/ichikaway/xformHelper/tree/2.0

※現在、PHP5.2ではエラーがでますので、PHP5.3以上が動作条件になります(2012/4/18)


Xformヘルパーは、まったく同じ記述で、フォーム入力画面ではinputタグを出力、確認画面ではPostデータを表示するヘルパーです。これにより、確認画面のViewファイルが入力画面と同じものが使えるようになり工数削減できます。

Cake2に対応した際にプラグイン化しています。

インストール方法

git cloneか、zipファイルをダウンロードし、

app/Plugin/Xformに設置。(Xform以下にはViewフォルダが入るはずです)

app/Config/bootstrap.phpに下記を記述

CakePlugin::load('Xform');

関連するコントローラに下記を記述

public $helpers = array('Xform.Xformjp');

使い方

Viewファイルでは、下記のように呼び出し。

echo $this->Xformjp->input('title');

基本的には、Cake1用の使い方と同じで、使い方は下記に載っています。

フォーム入力画面と確認画面で共通で使えるXformHelper

2009-12-05

cakeplus.add_validation_ruleにバリデーションルール追加

cakeplusを細々と開発していますが、嬉しいことにk1LoWさんにgithub経由でpullリクエストを貰ったので、それをマージしてみました。今回追加したルールは全角のbetween、ひらがなのみ、全角のみかをチェックするの3つです。

今回はgitで一連の操作をしたので、その流れをまとめました。

CakePlusの各機能に関しては、下記の記事の中に書いてあるのでご覧下さい。

http://d.hatena.ne.jp/cakephper/20090909/1252461412

興味を持った方は、ソースコードに使い方などの説明がたくさん書いてあるので、見て頂けると嬉しいです。

http://github.com/ichikaway/cakeplus


マージの前に、とりあえず、現行のコードを初期のバージョンとしてcakeplus-0.1というタグを付けて、push。githubのall tagsという箇所からいつでも取得できるようにします。

http://github.com/ichikaway/cakeplus/tree/cakeplus-0.1

git tag cakeplus-0.1 
git push --tags

ブランチを作って、pullリクエストのコードをそこにpullする。

git branch hoge
git checkout hoge 
git pull git://github.com/k1LoW/cakeplus.git

差分は下記で見れます

git diff master hoge

テストケースとか追加してコミット

vi tests/cases/models/behaviors/add_validation_rule.test.php
git add tests/cases/models/behaviors/add_validation_rule.test.php
git commit -m "add test case"

最後にマスターに移動して、マージして、githubにpush

git checkout master
git merge hoge
git push
git branch -d hoge

git cloneして何かしらCakeplusに機能追加した人は、pullリクエスト下さい(別にメールで連絡でもいいです)。マージしますので。


追記:

今回の追加バリデーションの実装は加賀澤さんという方にして頂きました。ありがとうございます。READMEのContributor欄にお名前を加えさせて頂きました。


追記:

git pullリクエストに対応する方法が下記にまとまってます。

http://help.github.com/pull-requests/#merging_a_pull_request

自分の場合のパターン

$ git branch master-merge
$ git checkout master-merge

$ git remote add hogehoge git://github.com/hogehoge/cakeplus.git
$ git fetch hogehoge
$ git merge hogehoge/master
//ここで色々と確認、追加、修正作業

$ git co master
$ git merge master-merge
$ git push origin master

$ git branch -d maser-merge
$ git remote rm hogehoge

2009-09-09

プラグインを拡張する方法(how to extend a plugin)

Cakephp1.2.4を利用しています。

ある外部プラグインを使っていて、その一部を拡張したい場合、そのプラグイン自体を改良していくのもいいんですが、それだとプラグインのアップデートが難しくなります。

今回は、僕のCakeplusプラグインを使ってそれを拡張する方法。

結論から言うと、Cakeplusのbehaviorをインポートして、継承するだけですw


Cakeplusは現在githubで管理しています。

http://github.com/ichikaway/cakeplus/tree


現在下記の機能があります。


今回は、cakeplusのバリデーションルールを集めたadd_validation_rule.phpを拡張してみます。add_validation_rule自体の使い方は下記を参照ください。

http://d.hatena.ne.jp/cakephper/20090603/1244016972


まず、cakeplusをダウンロードして設置します。フォルダ構成として、plugins/cakeplusになります。

pluginsフォルダ以下にcakeplusplusという拡張用プラグインフォルダを作ります。

下記のような構成にします。

plugins
 |- cakeplus
 |- cakeplusplus
      |- models
           |-behaviors

そして、cakeplusplus/models/behaviors/以下にext_add_validation_rule.phpというファイルを作成し、下記内容を記載します。

<?php
App::import('Model', 'cakeplus.AddValidationRule');
class ExtAddValidationRuleBehavior extends AddValidationRuleBehavior {

}
?>

あとは、モデルのbehavior呼び出しで、Cakeplusplus.ExtAddValidationRuleを呼び出せば継承した側のbehaviorが利用できます。

<?php

class Post extends AppModel {

        var $name = 'Post';

        //var $actsAs = array('Cakeplus.AddValidationRule');
        var $actsAs = array('Cakeplusplus.ExtAddValidationRule');

}
?>


例えば、add_validation_rule.phpのmaxLengthJP()を拡張したければ、cakeplusplus/models/behaviors/ext_add_validation_rule.phpを変更するだけです。下記の例は、文字数制限の最大文字数を、定義したものの2倍まで許すという例です。

<?php
App::import('Model', 'cakeplus.AddValidationRule');
class ExtAddValidationRuleBehavior extends AddValidationRuleBehavior {

        function maxLengthJP( &$model, $wordvalue, $length ) {
                $word = array_shift($wordvalue);

			//extend
			$length = $length * 2;
                
                return( mb_strlen( $word ) <= $length );
        }
}
?>

2009-07-21

cakephp2とcake3のZipダウンロードを追加(git2zip.com)

cakephp2とcake3のソースコードが早くも公開されています。

http://code.cakephp.org/projects

cakephp2はPHP5以上の環境で、cake3はPHP5.3以上の環境で動作します。

これらを試したい場合は、本家に公開鍵を登録してからgit cloneする必要があります。これだと面倒だという人のために、zipでダウンロードできるようにしました。

前に作ったgit2zip.comのサイトに、cakephp2とcakephp3を追加しています。

http://git2zip.com/thechaw/


毎日、日本時間の朝6時に更新があればzipファイルを出力します(ファイル名に出力日が入っています)。


cake3のソースには、appフォルダ内にサンプルのpostsコントローラなどが入っていますので、ネームスペースを使った下記のようなソースを見ることが出来ます。

<?php

namespace app\controllers;

use \app\models\Post;
use \app\models\Comment;

class PostsController extends \cake\responders\Controller {

	public function index() {
		$posts = Post::find('all')->to('array');
		return compact('posts');
	}
}

2009-07-07

SQL syntax highlight for Debug_kit

I make SQL syntax highlight function for sql log panel of Debug_kit. I use GeSHi for syntax highlight.

Source code download here.

You can see diff code here.


バシャログさんの「明日使える!?CakePHP Hack:SQLデバッグ表示をシンタックスハイライト」の記事のアイディアがかなり良かったので、Debug_kitのSQL Logパネル対応版を作りました。ハイライトで使った機能は、GeSHiというものを使いました。

GeSHi入りのzipファイルは、ここに置いています.

(GeSHiが入ってないgitのレポジトリは、ここです。

ZIPを解凍して通常のDebug_kitと同じようにプラグインフォルダに置いて、app_controllerあたりで呼び出せば使えるようになります。Debugkitの使い方は下記に書いています。

http://d.hatena.ne.jp/cakephper/20090604/1244112188


このDebug_kitを組み込むと、下記のような画面がSQLログパネルに出てきて、無事にSQLがハイライトされます。(この画面はcake標準のcake.generic.cssを読み込んでいるので、そのCSSの中で定義されているpreタグの箇所が適用されてしまっているので、SQLクエリの箇所の背景に色が付いています)

f:id:cakephper:20090707143041j:image


今回、オリジナルのDebug_kitからの差分はここで見れます。ほんのちょっと追記しただけ。


Debug_kitで前にSQL Explain機能を作ったときに、コアコードに手をいれずに、html入りのSQLクエリ情報を引き抜いて、さらにそこからクエリ情報だけを引き抜く箇所を作ってたので(最終的にはMarkStoryさんが微調整の修正を入れたけど)、今回の対応も簡単でした。(DataSource内で保存しているクエリ情報にhtmlタグが入ってるのが間違いなんだけど、これはたぶんCake1.3で解決するはず)。興味がある方は、debug_kit/controller/component/toolbar.phpのclass SqlLogPanelのbeforeRenderの中のソースを見てみると良いです。