20091030cakephphandson 01
Upcoming SlideShare
Loading in...5
×
 

20091030cakephphandson 01

on

  • 1,650 views

 

Statistics

Views

Total Views
1,650
Views on SlideShare
1,584
Embed Views
66

Actions

Likes
0
Downloads
5
Comments
0

3 Embeds 66

http://coderwall.com 63
http://www.slideshare.net 2
http://paper.li 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

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

20091030cakephphandson 01 20091030cakephphandson 01 Presentation Transcript

  • CakeMatsuriワークショップ 快適アプリケーション開発入門 2009/10/30 yandod 1
  • アジェンダ CakePHPとは つぶやきサービスを作ろう セットアップ MVCの作成、データの表示 フォームの扱い、データの保存 レイアウトの適用‫‏‬ 2
  • CakePHPとは 3
  • 公式サイト http://www.cakephp.org/ 4
  • コンセプト 全てのレベルのPHPユーザが 素早く安定したウェブアプリ ケーションを開発が行える事
  • つまり 初心者でも手軽に開発がで きる親しみやすさ 上級者がとことん使いこんで いけるだけの拡張性 この2つを両立
  • 具体的な特徴 面倒なインストール・設定作業はほぼ皆無 小さなプログラムだけで機能を実現できる PHP4/PHP5に両対応 サーバやコマンドライン、ライブラリの知識は丌要 Ruby on Railsにとてもよく似たMVCモデル ルールを知ってると何だか楽になる原則 7
  • 2007年頃から日本国内でも爆発的に普及 着実にユーザ層が拡大中 8
  • 東京でのCakePHP勉強会 30人 → 50人 → 70人 → 140人 9
  • 各国でのイベントも活発 10
  • つぶやきサービスを作ろう CakePHPで作るマイクログログ 11
  • 今回作成するアプリケーション http://labs.strk.jp/code-fight/blog/ 12
  • 題材選定の目的 仕様がシンプルで理解しやすい データ表示、保存、AJAXなどの要素が揃っている 素材の提供を許可してくださったsotarokさんに感謝 13
  • 通常は公式サイトからダウンロード 14
  • セットアップ 取得した圧縮ファイルを展開 展開したファイルをPHPが動作する場所へ配置 設定ファイルを修正 コマンドライン作業などは必要なし 15
  • CakePHPのディレクトリ構造 設定ファイル コントローラー(よく使う) モデル(よく使う) ビュー(よく使う) フレームワーク本体 16
  • 注意 セットアップ時に 変更する設定が環境によっ て異なる場合があります
  • index.phpへアクセス 上の通りのオールグリーンの表示があればOK 18
  • なんかおかしい例 mod_rewriteが動いていないとこうなる 19
  • 対処方法(mod_rewriteの設定) (推奨)httpd.conf を変更し、apache再起動 #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule rewrite_module modules/mod_rewrite.so LoadModule setenvif_module modules/mod_setenvif.so コメント解除 Apacheの設定が変更できない場合は core.php //Configure::write('App.baseUrl', env('SCRIPT_NAME')); コメント解除 後者の場合は今後のURLに常にindex.phpを付ける事に /pages/home → index.php/pages/home 20
  • データベース設定 余計な問題を避ける為に極力 UTF8を使う。 phpMyAdminの設定ミスなどが原因で文字化けが起 こりがち テーブル名やカラム名はCakePHPのルールに従うと 楽ができます。 好きな名前を使っても、追加の設定を行えば対応で きます。 21
  • サンプルデータの登録 CREATE TABLE IF NOT EXISTS `posts` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `body` text COLLATE utf8_unicode_ci, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `posts` (`id`, `user_id`, `body`, `created`, `modified`) VALUES (1, 1, 'これは、記事の本文です。', '2009-10-10 01:06:07', '2009-10-10 01:23:17'), (2, 1, 'そこに本文が続きます。', '2009-10-10 01:06:07', '2009-10-10 01:23:58'), (3, 1, 'こりゃ本当に面白そう!うそ。', '2009-10-10 01:06:07', '2009-10-10 01:24:08'), 22
  • 設定ファイル (database.php)の作成 class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'matsutter', 文字化け対策 'encoding' => 'utf8', 'prefix' => '', ); app/config/database.php.default をコピーして作成 23
  • 実習 1-0 ワークショップ用のCakePHP をセットアップしてみましょう http://groups.google.co.jp/group/cakematsuri-workshop PHPが動く場所に設置 app/config/sql/dump.sqlのデータを登録 database.php.defaultをコピーしてパスワード設定
  • 基本のコーディング作業 処理の入り口を担当するController データベースとのやりとりやロジックを担当するModel 画面を表示するView 25
  • 理屈はともかく・・・ MVCのパーツを順次作成するのが 基本のサイクル 26
  • Modelの作成 <?php class Post extends AppModel { var $name = 'Post'; } app/model/post.php として作成 ※Modelは標準では単数形の名前になります。 27
  • Controllerの作成 <?php class PostsController extends AppController { var $name = 'Posts'; var $scaffold; } app/controller/posts_controller.php として作成 $scaffoldによりこれだけで動く! 28
  • /posts/ の実行結果 登録・一覧・ソート・更新・削除が可能 29
  • Controllerへのアクションの追加 <?php class PostsController extends AppController { var $name = 'Posts'; //var $scaffold; //丌要なので消す function index() { $this->set('posts', $this->Post->find('all')); } } ?> Viewに対してpostsという名前でデータを渡す Index メソッドを追加した事により、/posts/index へアク セスされた場合に実行する処理を定義できます 30
  • Viewの作成 <h1>ほげったー</h1> <?php echo date(‘Y-m-d’); ?> app/views/posts/index.ctp として作成 (UTF-8で保存する事を忘れずに) /posts/index へアクセスされた場合に 表示する画面を作成します 31
  • /posts/index の実行結果 作成したViewが表示される 32
  • (重要)CakePHPの基本ルール /posts/update にアクセスされた場合 → PostsControllerのupdate メソッドを実行し views/posts/update.ctp を表示 /mypage/home にアクセスされた場合 → MypageControllerのhome メソッドを実行し views/mypage/home.ctp を表示 ルールを把握してスムーズな作業を! 33
  • 実習 1-1 1-2 Model,Controller,Viewを作る models/post.php controllers/posts_controller.php Scaffoldの挙動を確認 Indexアクションと views/posts/index.ctp を作成 自作した画面の表示を確認
  • データベースから取得したデータを表示する Modelの機能によりSQLは自動的に実行されて結果 はハッシュとしてControllerで取得できる ControllerからViewへデータをsetで渡す Viewでは渡された変数をただ使うだけ 35
  • ViewでControllerのデータを扱う <?php echo $html->link('つぶやく','/posts/add') ?> <table> <tr><th>Id</th><th>user_id</th> <th>Title</th><th>Created</th></tr> <?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td><?php echo $post['Post']['user_id']; ?></td> <td><?php echo $post['Post']['body']; ?></td> <td><?php echo $post['Post']['created']; ?></td> </tr> <?php endforeach; ?> </table> 36
  • /posts/index の実行結果 データベースから取得したデータが表示された! 37
  • 実習 1-3 Modelのデータを表示する views/posts/index.ctpを修正 新しい画面へのリンクの設置 Controllerから渡した変数のデータ構造に注意 よくわからない時はvar_dump
  • データベースにデータを登録する データ登録用の画面を作成 Modelの機能により配列変数を渡すだけでデータを 登録できる Modelに渡すデータ構造を作ってくれるFormHelperを つかう 入力制限のチェックも可能 39
  • Controllerへのアクションの追加(抜粋)‫‏‬ <?php class PostsController extends AppController { function add() { if (!empty($this->data)) { if ($this->Post->save($this->data)) { $this->flash('Your post has been saved.','/posts'); } } } } ?> /posts/add 時の処理を追加 40
  • Viewの追加 add.ctp <h1>Add Post</h1> <?php echo $form->create('Post'); echo $form->input(‘user_id'); echo $form->input('body', array('rows' => '3')); echo $form->end('Save Post'); ?> /posts/add 時の画面を追加 FormHelperでフォームを出力 41
  • validateの追加 post.php <?php class Post extends AppModel { var $name = 'Post'; var $validate = array( 'body' => array( 'rule' => array('maxLength', 140), 'allowEmpty' => false), ); } 42
  • /posts/add の実行結果 入力検証付きの登録画面ができた 43
  • /posts/add の実行結果 正しい入力をすれば登録される 44
  • 実習 1-4 データ登録機能を作る views/posts/add.ctp と addアクションを作成 models/post.phpにvalidateの設定を追加 入力チェックの挙動とデータ登録を確認
  • Controllerへのアクションの追加(抜粋)‫‏‬ <?php class PostsController extends AppController { function delete($id) { $this->Post->del($id); $this->flash('The post with id: '.$id.' has been deleted.', '/posts'); } } メッセージを表示後に /postsへ移動する ?> /posts/delete 時の処理を追加 画面は存在しないのでViewは丌要 46
  • /posts/delete/{id} の実行結果 urlに付不したidのレコードが削除される。 必要であればindexなどの画面にリンクを設置 47
  • できた! Controllerにアクションを追加 アクション内でModelの処理を呼び出す ViewでControllerから渡されたデータを表示 Helperなどを利用すると記述内容を削減できる 作業の流れが把握できましたか? 48
  • もうすこしカッコよくする 49
  • Paginate データをページ毎に分けて表示する Controllerの機能とHelperの機能を使って実現 基本的にはイディオムなので丸覚え、コピペで対処可 50
  • Controllerへの設定追加(抜粋)‫‏‬ <?php class PostsController extends AppController { var $name = 'Posts'; var $paginate = array( 'order' => array('Post.id' => 'DESC'), 'limit' => 10 ); ソートなどの設定 function index() { $this->set('posts', $this->paginate('Post')); } Paginateメソッドを使う Modelのfindの代わりにControllerのPaginateを使う 51
  • Viewの修正 index.ctp </table> <?php echo $paginator->prev() ?> &nbsp; <?php echo $paginator->numbers() ?> &nbsp; <?php echo $paginator->next() ?> ページの末尾にPaginatorヘルパーを呼ぶ処理を追加 52
  • /posts/index の実行結果 リンクの表示 クエリの自動組立 自動でクエリを組立てPaginateを実現! 53
  • 実習 1-5 Paginateの組み込み controllers/posts_controller.phpに設定を追加 views/posts/index.ctp にpaginatorの記述追加 データがページ分けして表示できればOK
  • レイアウト変更 画面のヘッダー・フッター部分は layoutに存在 通常時はCake標準の default flash などが使われる デザインを変更する場合は app/view/layouts/ 以 下に default.ctp などを置く Defalutなど以外を使う場合は layoutプロパティを設 定する 55
  • レイアウトの変更例 class PostsController extends AppController { function help() { $this->layout = ‘custom’; } } app/view/layouts/custom.ctp をヘッタ・フッタとして利用 56
  • app/views/layouts/custom.ctp の内容 <html> <head> <title><?php echo $title_for_layout; ?></title> </head> <?php echo $content_for_layout; ?> </html> $content_for_layout にviewの処理結果が入っている 57
  • 実行結果 あとは自由にCSSなどを設定すればOK Copyright © YusukeAndo. 2009 - . All rights reserved.
  • 素材を適用 大幅にそれっぽくなった Copyright © YusukeAndo. 2009 - . All rights reserved.
  • 実習 1-6 layoutの組み込み views/layouts/default.ctpを素材に入れ替える views/posts/index.ctpを素材に入れ替える それっぽい表示を確認
  • まとめ 61
  • まとめ CakePHPはとても簡単はMVCフレームワーク さまざまな機能を活用することでコード量を大きく減ら す事ができる 必要な情報はマニュアル・API・ネットからゲットする ‚Give back as much as you take‛ ブログに書く、誰かに教えてあげるなど自分が得た以 上のものを誰かに不えてあげましょう 62
  • 質疑応答 ご静聴ありがとうございました。 63