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内で自動で呼び込まれているのでプログラムであえて呼び込む必要は無し。
 

Posted on

CakePHP ナイスなクリスマスプレゼント!!

みなさん、今年ももうすぐ終わりですね・・・
今のプロジェクトが忙しいので全然年の終わりって気がしませんが、
巷ではサンタさんがナイスなプレゼントをくれました。

その名も、

CakePHP 1.2 Final (1.2.0.7962)!!

ついに出ました安定版。

プロジェクトにかかわっていただいているみなさんありがとうございます。
このブログでちょっとでも恩返しできたら幸いです。

では、皆さん良いお年を・・・

Posted on

CakePHP関西勉強会で発表してきました

CakePHP関西勉強会に行って来ました。
今回はいつも聞いているだけの立場から何か話しをしてみようということでライトニングトークに立候補しました。
話す内容はというとCakePHPでの開発事例と失敗談という事で発表しました。

失敗談を話すために今まで、はまった事を思い出しながらパワーポイントを作っていたのですが結構失敗しているなーという実感です。

ただこれらのいくつかは自己解決をせずに別の方法で逃げたとか、次のバージョンで直ってたという形の発表になってしまったのでちょっと後ろめたさもあったのですが、自分も同じような経験をしたけどこういう方法で解決をしたよとアドバイスを頂いたりして凄くありがたかったです。

懇親会でも同じような失敗をしておられる方がいて凄く参考になったと声を掛けていただいたので、発表して良かったなと心底思いました。

発表をしていて思ったことは聞いている皆さんのリアクションが凄いうれしいなという事です。
開発事例でフォーム数が200以上もあると言ったところでみんなが「ウワー」とリアクションを取ってくれたことで気持ちが楽になってリラックスして発表をしていくことが出来ました。ありがとうございました。
終わったときの満足感もあって凄く楽しい勉強会でした。

Posted on

CakePHP関西勉強会に参加してきました

関西では初となるCakePHP関西勉強会に参加してきました。

10月に東京でCakePHPカンファレンスに行って以来、関西でもしましょう!と言って無事に実現できたのでとても感激でした。今回で、終わらせず、2,3ヶ月ペースでやっていきたいですね。次回は僕も発表しようかな?(今回は弊社の福井が発表させていただきました。)ネタを考えておこう・・・

1. CakePHP アプリケーションの流れを追う

  • shin1×1さん
  • 今までポワーンとわかっていたつもりでしたが、図で動きを説明してもらうととってもわかりやすかったです。
  • 特に前処理、後処理が色々あったのにびっくりした。
  • componentが便利そう!今、modelが肥大化傾向にあるので考えてみようかな・・・
  • Cakeのソースまた読んでみよう(だいぶきれいになったらしいので)

2. フォームメールを生成するプラグイン

  • slywalkerさん
  • 風水系にたとえていた今までの職業が気になりました(懇親会で聞けずじまい・・・)
  • いままで独学で開発されていたのはすごいです。
  • プラグインは使ったことがなかったので勉強になりました。
  • default.ctpなどがあちこちに出来るのをどうしよう・・・
  • 貴重な発表ありがとうございました。

LT1. 開発事例と失敗談

  • keisonさん
  • うまく実例と失敗談をまとめてくれました
  • チケット投げるようなバグもあったので(現在は修正済み)英語を勉強しなくては・・・
  • comporntファイルがないのに呼んでapachが落ちるバグはなんかのクラスをnewしまくってメモリが飛んでる感じでした・・・
  • 発表お疲れ様でしたm(_ _)m

LT2. CakePHPと私(仮)

  • 飯、カメラ、飯、カメラ、飯、カメラ、若干PHP
  • CakePHPは・・・(笑)
  • 写真の解説が面白かったです。
  • 湯布院から帰ってきて体重増えてませんでした?(笑)

懇親会

韓国料理おいしかったです。みんなと打ち解けだした頃に終電で帰らなければならず、すごく残念でした。もっとCakeの話をしたかったです。
次回はまだ話せなかった人と話してみたいです。
なんと、偶然、8年ぶりに会った高校の同級生も参加してました!!ビックリ!!

みなさん、お疲れ様でした。

Posted on

複数行のリストを一気に登録する際の入力チェック

お客さんの要望で複数行のリストを直接リストの画面で編集したいと
言われて作った時に困った入力チェックの方法を覚書しておきます。

シチュエーションは注文カートに注文情報を入れてるリストで
数量を一気に変えたいというものでした。

まずビューで登録されている注文の商品と個数を一覧に出します。

<table>
<tr>
<th>商品名</th>
<th>値段</th>
<th>数量</th>
</tr>
<?php foreach($lists as $key=>$val) { ?>
<tr>
<td><?= es($val['Order']['name']) ?></td>
<td><?= es($val['Order']['price']) ?></td>
<td><?php echo $form->input("Order.{$key}.num", array('type' => 'text')); ?></td>
</tr>
<?php } ?>
</table>
<input type="submit" name="recalc" value="再計算" >

ここで数量のところをテキスト入力にしておいて再計算ボタンを押して$this[‘Order’][キーの番号][‘num’]
という風にコントローラに持ってきます。

これをモデルに渡して数量の入力チェックをかけます。

//注文リストの変更の際の入力チェック
function orderValidates($data) {
$chk =& Validation::getInstance();
//注文リストに入れる際に入力チェックをする
foreach($data['Order'] as $key=>$val) {
if (empty($val['num']) || !$chk->numeric($val['num'])) {
$this->validationErrors[$key]['num'] = '数量が不正です';
}
}
//結果の返却
if (count($this->validationErrors) > 0) {
return false;
}
return true;
}

これで数量の入力チェックでエラーが出た時にエラーの行の数量のテキストエリアの
隣に「数量が不正です」とメッセージをcakeが自動で出してくれました。