CakePHP Kansai 2008-12-12
Upcoming SlideShare
Loading in...5
×
 

CakePHP Kansai 2008-12-12

on

  • 3,900 views

 

Statistics

Views

Total Views
3,900
Views on SlideShare
3,730
Embed Views
170

Actions

Likes
2
Downloads
7
Comments
0

2 Embeds 170

http://d.hatena.ne.jp 165
http://slywalker.hateblo.jp 5

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

CakePHP Kansai 2008-12-12 CakePHP Kansai 2008-12-12 Presentation Transcript

  • slywalker フォームメールを生成する プラグイン
  • アジェンダ
    • 自己紹介
    • DB を使わない Model
    • フォームメール生成のアプリケーション
    • アプリケーションをプラグイン化
    • まとめ
  • 自己紹介
    • 原田 康生
    • 大阪のこっそり PHPer
    • 経歴 水・土・光・風 各属性の職業を経験 プログラム進化ガラパゴス状態のまま開業
    • 所属 株式会社スライウォーカー
    • ブログ 忍び歩く男 - SLYWALKER http://d.hatena.ne.jp/slywalker/
    • Wassr, Twitter, Hatenea ID slywalker
  • DB を使わない Model
    • DB に保存するわけではないが、 CakePHP の Validation を利用したい!
    • FormHelper を利用したい!
  • 基本的な設定 <?php class Sample extends AppModel { public $name = 'Sample'; public $useTable = false; ↑ テーブルは使わないないよ〜 でも、これだけでは Validation や FormHelper を 使いこなせない !!
  • そこで、 $_schema の登場 00045 class Model extends Overloadable { 00095 /** 00096 * Table metadata 00097 * 00098 * @var array 00099 * @access protected 00100 */ 00101 var $_schema = null; http://api.cakephp.org/ より
  • 例えば、こんな Table なら CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `active` tinyint(1) NOT NULL, `creaeted` datetime NOT NULL, PRIMARY KEY (`id`) )
  • $_schema はこんな配列になる var_dump($this->User->_schema); array 'id' => array 'type' => string 'integer' (length=7) 'null' => boolean false 'default' => null 'length' => int 11 'key' => string 'primary' (length=7) 'name' => array 'type' => string 'string' (length=6) 'null' => boolean false 'default' => null 'length' => int 255 'password' => array 'type' => string 'string' (length=6) 'null' => boolean false 'default' => null 'length' => int 255 'active' => array 'type' => string 'boolean' (length=7) 'null' => boolean false 'default' => null 'length' => int 1 'creaeted' => array 'type' => string 'datetime' (length=8) 'null' => boolean false 'default' => null 'length' => null
  • 要するに・・・
    • DB から Table 情報を読み込んで
    • Model::$_schema に記録する
    • じゃ〜
    • Table がないなら自分で設定してしまえば OK!
  • フォームメール生成の App
    • どうせ Model::$_schema を自前で
    • 設定するなら、動的に設定できるように
    • Model::$validate も同様に
    • FormHelper 大活躍
    • オプションを配列で渡せるので便利!
  • ハマリポイント!! function edit($id = null) { ・・・ if ($this->data) { // validates の前に set で Model にデータを渡しておく $this->FormMailView-> set ($this->data); if ($this->FormMailView-> validates ()) { if ($this->_send( $formMailForm['FormMailForm']['email'], $formMailForm['FormMailForm']['title'] )) { $this->Session->setFlash(' 送信しました '); $this->render('send'); return; } else { ・・・
  • ハマリポイント!! function _send($sendTo, $title) { ・・・ // Model::$data をとってくると // FormHelper から渡る配列が // 文字列になっている $data = $this-> FormMailView->data ; ・・・
    • GoogleCode にて絶賛公開中 http://code.google.com/p/form-mail-cakephp-plugin/
  • で、このままでは終わりません! プラグイン化 ここから本編
  • プラグインって使ってますか?
  • すっ、すごく便利です!
    • むしろ、今まではプラグイン機能の伏線だったのじゃないのか?
    • CakePHP カンファレンス東京の Garrett の講演でも、今後プラグインに重点がおかれると言っていた。(はず・・・)
  • 例えば、大規模なものになると… app/ controllers/ as_controller.php bs_controller.php … zs_controller.php models/ a.php b.php … z.php views/ as/ bs/ … zs/
  • 機能ごとに整理できる! app/ plugins/ ad/ controllers/ ad_as_controller.php ad_bs_controller.php ad_cs_controller.php models/ ad_a.php ad_b.php ad_c.php views/ ad_as/ ad_bs/ ad_cs/ eh/ …
  • その他にも盛りだくさんの特典
    • 機能ごとに部品化されるので、 他の App でもディレクトリコピーで使える
    • 機能をまたぐような処理を ついつい書いてしまって Controller が複雑になるのが防げる
    • もし、機能をまたぐような処理をやるとしても app/controllers/ に書いたらよい
    • 大規模開発も怖くない!
  • 詳細は WEB で・・・
    • Cookbook http://book.cakephp.org/ja/ マニュアル »CakePHP による開発 » プラグイン
  • 変更点 (DB) Plugin 名 : FromMail
    • Plugin 名
      • form_mail
    • テーブル名
      • froms -> form_mail_ forms
    • 外部キー (忘れがち!)
      • form_id -> form_mail_ form_id
  • 変更点 (Model) Plugin 名 : FromMail
    • ファイル名
      • from.php -> form_mail_ form.php
    • モデル名
      • class Form extends AppModel {
      • class FromMail Form extends FromMail AppModel {
    • アソシエーション ( CookBook のとおりだと、エラーになった)
      • public $hasMany = array(’Element’);
      • public $hasMany = array(
        • 'FormMail Element' => array(
          • 'className' => 'FormMail.FormMail Element',
        • )
      • );
  • 変更点 (Controller) Plugin 名 : FromMail
    • ファイル名
      • forms_controller.php
      • form_mail_ forms_controller.php
    • コントローラ名
      • class FormsController extends AppController {
      • class FormMail FormsController extends FormMail AppController {
    • コンポーネント、ヘルパー、モデル
      • public $components = array('Hoge'); app/controllers/componets/ 以下を呼び出す
      • public $components = array(' FormMail. Hoge');
      • plugins/form_mail/controllers/componets/ 以下を呼び出す
  • これを忘れないように
    • app_controller.php
    • form_mail_ app_controller.php
    • class AppController extends Controller {
    • class FormMail AppController extends App Controller {
  • これを忘れないように
    • app_model.php
    • form_mail_ app_model.php
    • class AppModel extends Model {
    • class FormMail AppModel extends App Model {
  • まとめ
    • プラグイン機能は十分実用段階にあると思うので、どんどん活用していこう!
    • 部品化して、再利用を簡単にして、 どんどん楽していこう!
    • たくさんのモデル・コントローラも
    • どんとこいっ!
    • openpear のような、 CakePHP のプラグインを集めたサイトもいいかも!
    • みんな! オラに便利なプラグインを わけてくれ!