Posted on

CakePHPでSSL認証とそうでない時の処理を振り分ける

ログインするときにSSL通信でログインするか普通の通信でログインするかを選べるようにして欲しいというお客さんの要望があったので今回はこんな感じのプログラムで対応しました。

やっている内容はログイン時にSSL通信でログインした時、Cake内の移動の際にSSL通信の場合はhttpsで移動するようにするという感じです。

続きを読む CakePHPでSSL認証とそうでない時の処理を振り分ける

Posted on

ドキュメント勉強会に参加してきました。

ドキュメント勉強会開催の経緯

技術部の今岡です。

もう少し前のことになってしまって恐縮ですが、ドキュメント勉強会というものに参加してきました。

8月6日(木) 大阪市北区のメビック扇町というところで、場所はCakePHP関西勉強会の会場と同じところです。

そのCakePHP関西勉強会の第二回が、私の技術系勉強会の初体験だったにもかかわらず、今回の勉強会では発表者に名前を連ねることになってしまいました。

CakePHP勉強会の後、人から薦められてアカウントを作っていたTwitterを本格的に利用し始めました。

Twitterでは様々な人が好き勝手なことを雑多に呟き、その呟きに興味があったりして継続的にその呟きを読む為には、呟いている人を「フォローする」という操作を行います。

Twitterの詳しい話は今回の話題ではないですが、そのTwitter上でCakePHP勉強会を主催された新原さんという方をフォローさせて戴きました。

新原さんがTwitter上で勉強会というものについて、とか、ドキュメント勉強会ってどう思う?というような疑問を投げられまして、私を含め数人がそれに反応し、その反応の内容を受けて新原さんはドキュメント勉強会を開催しようと決定されました。

(新原さん自身のブログやWassarという別のサービスなどもありますので、Twitterがすべてではないと思います。念のため。)

勉強会の決定や開催日時の告知にもTwitterが有効に活用されました。

そして、そのTwitterを通じて、私のところに発表の依頼が飛んできたのでした・・・。

 

続きを読む ドキュメント勉強会に参加してきました。

Posted on

CSVファイルをモデルのfindメソッドで読み込む方法

CakePHPの勉強会で、英語に負けずコードをばんばん読んでいこう!という話があったので、Bakeryの中を覗いて見つけたソースを動かすというのをやってみました。
今回はCSVファイルをfind一発で読んでしまおうというヤツです。
元はSiegfriedHirschさんが作成されました。

CSVファイルをデータベースっぽくする為に、いくつか準備をします。

続きを読む CSVファイルをモデルのfindメソッドで読み込む方法

Posted on

第2回CakePHP関西勉強会でLTしてきました

6月5日に第2回CakePHP関西勉強会に参加してきました。
今回の発表はかなりのグズグズになってしまいました。
まず体調が悪く血圧がかなり下がってしまっていて、発表中は景色が白く見えるぐらいもうろうとして何を話しているのかという感じになってしまいました・・・
次に発表のリハーサルの時は目の前のノートパソコンで動かしていたのですが、本番ではプロジェクタを見て操作をすることになり画面が見にくく操作が思うように出来ず、操作にだいぶ時間を取られてしまいました。
とりあえず発表内容のパワーポイントです。

とりあえず座標合わせライブラリの評判が良かったので、頑張ってソースを整理して公開できたらいいなと考えています。
発表してみて色々指摘を受けれたので、それを受けて今後作っていけたらと思います。

Posted on

Model,View,Controllerのディレクトリ整理方法

CakePHPでmodels,views,controllersの中がファイルで一杯になったので整理の方法をメモ。

/**
* The settings below can be used to set additional paths to models, views and controllers.
* This is related to Ticket #470 (https://trac.cakephp.org/ticket/470)
*
* $modelPaths = array('full path to models', 'second full path to models', 'etc...');
* $viewPaths = array('this path to views', 'second full path to views', 'etc...');
* $controllerPaths = array('this path to controllers', 'second full path to controllers', 'etc...');
*
*/

app/config/bootstrap.phpのコメントにも書いてますが、

$contlloerPaths = array(
    CONTROLLERS.'folder_name'. DS,
);
$modelPaths = array(
    MODELS.'folder_name'. DS,
);
$viewPaths = array(
    VIEWS.'folder_name'. DS,
);

とbootstrap.phpに定義しておくと上で定義したフォルダの先までファイルを探しにいってくれます。
(内部でApp::importが探しにいってるみたい。)

注意するのは、
フォルダ階層が違うので同じ名前のファイル名が作れるけど、
先に見つけたファイルが読み込まれ、もう一方の同じ名前のファイルは読み込まれませんでした。(エラーにはならず・・・)
後、
設定したらcacheは前のパスが残ってるので消しときましょう。

Posted on

第2回CakePHP関西勉強会に参加してきました。

先日6月5日に第2回CakePHP関西勉強会に参加してきました。
今回で、東京のカンファレンスを含めて3回目の勉強会です。

だいぶ、CakePHP使用暦も長くなってきたので、
回を重ねるにつれて発表する内容が解るようになってきました。
(やっぱり、話がわかるとどんどん楽しくなってきますね!!)

以下、発表内容の感想です。

1. フックメソッドを極める
・shin1×1さん
・フックメソッド便利ですね!こんなに一杯あるとは思いませんでした。
・onErrorなんてあるんですね!便利そうなんで、今度どっかに使おう。
・フックメソッドを見える化してくれていたのですごく解りやすかったです。
・見事な前節でした!(笑)

2. 究極のコントローラを目指す
・slywalkerさん
・見事な整理っぷりでした。(整理しすぎな気も・・・)
・頑張ってリファクタリングします。

3. RubyOnRailsからCakePHPへ
・yabumaruさん
・あんなにRailsの道が険しいとは・・・
・Cakeで大規模案件をこなしたのがすごいです。

LT1. CakePHPでこんなの作ってみました
・msngさん
・割り勘電卓この前使わせていただきました。
・発表の仕方がすごくうまくて面白かったです。
・cakeは楽チンですね。

LT2. CakePHPでPDFを出力してみる
・keisonさん
・弊社のPDFライブラリの紹介です。
・helper化して公開したいです。

LT3. plugin の名前と URL がキモいのを何とかする
・pm11opさん
・piza!piza!piza!ヒザ!?
・Plugin楽しそうですね。使ってみたいと思います。(でもとりあえず、componentをもう少し使いこなそう・・・)
・楽しい発表でした。

懇親会
例の韓国料理屋でした。勉強会に参加できなかった方が30分も待って懇親会に参加されていて、
すごいパワーだなと思いました。
会社が近所と言う事もあり仲良くなれたし楽しい懇親会でした。
終電に間に合わないので鍋を食べ損ねたのが残念です。

主催してくださった皆様、発表していただきました皆様、来ていただいた皆様のおかげで
今回も楽しい勉強会になりました。
ありがとうございます。

また、発表会したいですね!!

Posted on

ラジオボタンを分けて表示する方法

普通にラジオボタンを下記のように作る時は問題ないのですが

$form->input("User.sex", array("type" => "radio","options" => array('1'=>'男性', '2'=>'女性')));

デザイン的にラジオボタンを分けて表示したい時があります。
とりあえず次のようにしてデザインの埋め込みたいところに記述します。

$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性')));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性')));

そうすると両方にhiddenのタグが付いてしまってラジオボタンの値を上手いこと取得してくれません。
そこで調べてみると初期値を指定してあげるとhiddenは出力しないということで

$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性', 'value'=>'none')));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性', 'value'=>'none')));

という感じに指定してあげました。
これで上手く行ったと思ったのですが確認画面に行ってから戻ってくるとラジオボタンのチェックが消えてしまっていました。

そこでさらに調べてみるとフォーラムでこんな解決策が載っていました。

$value = isset($form->data['User']['sex']) ? $form->data['User']['sex'] : -1;
$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性', 'value'=>$value)));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性', 'value'=>$value)));

これでラジオボタンのチェックが戻ってきた時に消える問題もなくなり、きちんと動くようになりました。

Posted on

shellでcakephpのプログラムを動かす方法

shellでcakephpのプログラムを動かす方法を覚書を記述しておきたいと思います。

まず/app/vendors/shellsの中にshellを動かすプログラムを書いたファイルを作ります。
今回はcron.phpとしました。
そのファイル内で次のようなコードを書きます。

class CronShell extends Shell{
var $name = 'Cron';
function sendEmail() {
//命令を記述(メールを送信する)
}
function deleteFlag() {
//命令を記述(デルフラグの立っているのを物理削除)
}
}

ここでのクラス名は先ほどつけたファイル名と同じにしておきます。
クラスの中では複数の命令が記述できます。

続きを読む shellでcakephpのプログラムを動かす方法

Posted on

CAKEPHPでqdmailを使ってメールをSMTP送信する覚書

今回メールを飛ばす時にSMTP送信しか出来ないサーバーでシステムを組んだので
CAKEPHPでqdmailを使ってメールをSMTP送信するようにしてみました。

まず下記のURLから
http://hal456.net/qdsmtp/
qdsmtp.phpの最新版をダウンロードしてきます。
ダウンロードしたのをcakePHPの/app/controllers/components
に置きます。(qdmail.phpと同じところに置く)

後はソースで次のように記述してあげるだけで大丈夫。
    $mail = new QdmailComponent();
    $mail -> smtp(true);
    $param = array(
        ‘host’=>’メールサーバー’,
        ‘port’=> 25 , //これはSMTPAuthの例。認証が必要ないなら 25 でOK。
        ‘from’=>’xxxxx@xxxxx.co.jp’,// Return-path: になります。
        ‘protocol’=>’SMTP_AUTH’,// 認証が必要ないなら、’SMTP’
        ‘user’=>’ユーザーID’, //SMTPサーバーのユーザーID
        ‘pass’ => ‘パスワード’, //SMTPサーバーの認証パスワード
    );
    $mail -> smtpServer($param);
    
    //メールを送信するユーザーリストの取得
    $mail->subject($this->data[‘Mail’][‘subject’]);
    $mail->from(‘送信元’);
    $mail->replyTo(‘返信先’);
    $mail->mtaOption(“-f”.’エラー時送信先’);
    $mail->kana(true);
    $mail->text(‘本文’);
    $mail->to(‘あて先’);  
    $mail->send(); // メール送信処理

qdsmtp.phpはqdmail内で自動で呼び込まれているのでプログラムであえて呼び込む必要は無し。