cakephpゴマ知識 auのSSL通信時の文字化けを回避する!

UTF-8のケータイサイトをつくってたら、SSLページでAUだけ文字化けする!

AUはSSLページでSjis以外は使えないらしくその対応を迫られた。
※アホス過ぎ!

SSLページかつAUのときだけSjis-winに変換することで対応ができた。

app_controller.phpを一部抜粋

public function afterFilter() {
	if (isset($_SERVER['HTTPS'])) { //SSLか判定
		if ($this->ezweb()) {    //AUか判定
			$outBuffer = ob_get_clean();
			$outBuffer = mb_convert_encoding($outBuffer, "sjis-win", "UTF-8");
			mb_http_output("sjis-win");
			ob_start("mb_output_handler");
			echo $outBuffer;
		}
	}
}

・出力バッファを取得し、UTF8からSjis-winに変換
・出力エンコードをSjis-winに設定
・バッファを出力して完了

っという具合。(即興コードなんであしからずw)

エンコード内容は各環境に切り替えればどこでも対応できると思います。
PHPでも利用できるんで、ちょっと改造してつかってみてください。

追記

※beforeRenderではなく、afterRenderじゃないとsessionがきれちゃいました><:

修正

すみません、めちゃめちゃインチキ書いてました!
app_controller.php 抜粋

public function afterFilter() {
	parent::afterFilter();
	if (isset($_SERVER['HTTPS'])) { //SSLか確認
		if ($this->auMobile()) { //AUか確認
			$this->output = mb_convert_encoding($this->output, ‘SJIS-win’, ‘UTF-8′);
			header(“Content-Type: text/html;charset=sjis-win”);
		}
	}
}
                     -

cakephpは$this->outputをエンコードして、ヘッダーをエンコードに合わせて設定すればオッケーです。
いやはや、Auのせいで大変ですわ><;

cakephp 配列を無限にネストしてhiddenへ自動で設定してくれるhelper

ssl環境下でセッションのやり取りが面倒になったため、値をすべてhiddenでもちまわすように変更したと思ったときにみつけました。

【Ryosukeさんのサイト】
http://www.mrk.jp/node/605#comment-209

即実践活用可能なレベルのヘルパーで一切の手修正いれずに活用できました。

感謝感謝!

ゴマ知識:fromヘルパーの定義でactionを指定すると、urlのケツにidが付与される

タイトルの通りなんですが、fromヘルパーの定義でactionを指定すると、urlのケツにidが付与される事がある。

これはcakephpの仕様のようですね。
バージョンは不明ですけど今回は1.3系で確認しました。
※匠曰く、1.3の仕様らしいんですけど、、暇なときに他のバージョンでも確認してみるずら。

んで、試行錯誤、瞑想した挙句、下記の方法で落ち着きました。
———————————–
回避するにはactionではなくurlを定義する。
———————————–

ようするにこんな感じです。
———————————–
Form->create(‘User’, array(“url” => “/hoge/userEdit”, “inputDefaults” => array(“dev” => false, “label” => false))); ?>
———————————–

こうすると余計なパラメータとかつかないので平和ですw

配列を逆順に入れ替える

最近、ホットな案件のリリースでてんやわんや、徹夜徹夜の日々だったので更新がまったくされなかったかわいそうなサイトTT

連続で公開していくけど、時系列がばらばらなのはご愛敬ですw

んで、今日はこれで30分はまった。

しかしphpってすごい
rsort($hoge);

で配列が逆順に入れ替わった=3
優秀ダワ~。

そのほかいろいろソートあるので、参考にしたサイトをご紹介。
【php javascript room】
http://phpjavascriptroom.com/?t=php&p=array_sort

こういう人に役に立つサイト作れるひと尊敬します。

cakephpのゴマ知識、携帯のradioボタンでちょっとハマる

今回はradioボタンの配置とデータの引き継ぎでハマッタ・・・。
例にならってゴマ知識なんですけど。
radioボタンを横に並べるには一個一個radioを定義しなければいけない。
array()とかでセットするとなぜか縦にしかならない。。。。
横にシロっつの!
まぁ間に何か挟むとかもできなくなるんで、ようはサボルなってことなんですね。
こんな感じにしたら、横3列の縦2列の強そうなradioボタンフィールドが出来あります。
—————————————————————————————————————————-
<table>
<tr>
<?php
for ($i =0; $i < 6 ; $i++){
echo ‘<td>’;
if(empty($this->data)){
echo $form->radio( ‘hogehoge.item’, array( $i=>” ) ,array(‘legend’ => false,’value’ => ‘none’) );
} else {
if($this->data[‘hogehoge’][‘item’] == $i){
echo $form->radio( ‘hogehoge.item’, array( $i=>” ) ,array(‘legend’ => false,’value’ => $i) );
} else {
echo $form->radio( ‘hogehoge.item”, array( $i=>” ) ,array(‘legend’ => false) );
}
}
echo ‘</td>’;
if($i == 2){
echo ‘</tr>’;
echo ‘<tr>’;
}
}
?>
</tr>
</table>
—————————————————————————————————————————-
※$this->data[‘hogehoge’][‘item’]にはvalidationとかでエラーになった際、選択したアイテムがセットされる想定です。
それで、選んでたアイテムの番号のときにvalueをそのアイテムの番号($i)に変更すれば、選択情報を引き継げます。
しかし、最近の携帯は<table><tr><td>とか使えるのね。
優秀だ~><;

cakephpのIDE変更!

タイトル通り、今日はCakephp用のIDEを変えました!

まず、Eclipse PDT.(定番ですね。)
却下!激しく重い!

次、phpエディタ
悪くはないんですが、やはり重いかなぁ・・。
pprの使い方をマスターする前に飽きた・・。

次、サクラエディタだけ。
無理!ハイライトキボンヌ!

次、Microsoft Expression Web4!
こいつはすべてを破壊する!(嘘)
重いし、頻繁にフリーズするし、高いし!

そして、色々探した結果!
NetBeans!
コレダ!!!
無料、軽い、性能もそこそこ、プラグインもあるそうで(追加したことないけどw)

まぁ無難にこれっすね!

※追記※

IDEのTAB設定でなぜか半角にスペースに変換する処理がデフォルトでなっている。

これを外さないと、他のエディタと色々問題を発生させる。

外すことを推奨してまーす。

以上!

cakephpのauthを使ってみたときの落とし穴ていうか墓穴

cakephpでの初案件を対応中。

なかなかauthの機能を使いこなせていないんですが、豆知識以下の、ゴマ知識について書き残します。

ひとーつ!!
$this->Auth->allow(‘アクション’)は認証スルーのアクションを指定する!
間違っても、認証後見れるページではないぜ!!!

ふたーーつ!!
login.ctpにの$form->create(‘User’,array(‘action’=>’login’));はlogin以外指定してはいかんぜ!!!
そりゃじゃまたログインページに飛ぶじゃないかと思うだろうが、↓のように設定するんだ!
$this->Auth->loginRedirect = ‘/users/memberTop;
そうすれば、認証後、そこへリダイレクトされるんだ!!!

ちなみに変なの設定すると認証されなくてハマるぜ!!!ハマッタZE!!!!

みーーーっつ!!!
新規会員登録時のパスワードはハッシュ化しないと、ログインできないぜ!!!!
//新規会員登録
function register($data)
{
$request = array();
$request[‘loginid’] = $data[‘User’][‘new_member_id’];
//AuthComponent::passwordでハッシュ化
$request[‘password’] = AuthComponent::password( $data[‘User’][‘new_member_password’] );
$result = $this->save($request);
return $result;
}

という具合だ!!

これを抜けるのに5時間かかった!!!
ハハハハハ!!

くすん・・・。