Advertisement
Advertisement

More Related Content

Advertisement

WTM53 phpフレームワーク いまさらcodeigniter

  1. PHPとフレームワーク いまさらCodeigniter WEB TOUCH MEETING 53 2013.01.19 大林 正典
  2. 自己紹介 • 大林 正典 / @moobay9 / インフラエンジニア • 20世紀からHTML/CSSは触ってましたがWEBを仕事 にしたのは2007年から • 2011年の秋まで東京の渋谷で働いてました • わりと有名どころの会社のサイト構築・運用を経験 • 時々プログラマー(PHPとシェルスクリプト) • 現在フリーです。猛烈に仕事募集中です
  3. お題 • PHP • フレームワーク • MVC • Codeigniter
  4. PHP
  5. “Personal Home Page”
  6. 正式名称は PHP: Hypertext Preprocessor
  7. HTMLの正式名称は HyperText Markup Language
  8. つまりPHPは 動的にHTMLデータを生成するために 生まれてきた言語なのです
  9.    ∩___∩    | ノ  u   ヽ 動的の意味が   /  ●   ● |         | u  ( _●_)  ミ   わからないクマー…  彡、   |∪| u、`\  / __  ヽノ /´>  )  (___) u / (_/       |       /        |  /\ \        | /    )  )  ∪    (  \        \_)
  10. こんなコードがあったとき hoge.php <?php if ($_GET['prm'] == 1) { echo "hoge"; } else { echo "uwaaa"; }
  11. http://dummy/hoge.php?prm=1 画面に表示されるのは「hoge」 http://dummy/hoge.php?prm=2 画面に表示されるのは「uwaaa」
  12. おなじhoge.phpにアクセスしてるのに 見た目が変わってますよね。 これが動的なデータ生成です。
  13. フレームワークとは
  14. ここでのフレームワークは厳密にいうと WEBアプリケーションフレームワーク
  15. 主なフレームワーク 名前 言語 Ruby on Rails Ruby CakePHP PHP Codeigniter PHP Zend Framework PHP Symfony PHP Catalyst Perl Struts Java
  16. よくある勘違い
  17. 「Smartyもフレームワークだよね? なんで入ってないの?」
  18. Smarty はテンプレートエンジンです。 後述する View をつかさどる物であって 決してフレームワークではありません。
  19. フレームワーク何するものぞ?
  20. 簡単に表現するならば 役立つ機能やよく使われる機能の 集合体です。
  21. 主な機能 • セキュリティ • データベースアクセス • セッション • 認証 • フォームのバリデーション(検証) • etc...
  22. 「俺またこの機能を書いてるよ…」 というような状況を無くすために フレームワークはあります。
  23. フレームワークの利点 • 誰がコードを書いても似たような作りになる - メンテナンス性アップ! - 品質の均一化! • 同じ事を省いてくれるので作成時間の短縮 - 工数削減!
  24. デメリットはあまりありませんが、 強いてあげれば各フレームワークごとに お作法がありますので要学習
  25. MVC
  26. Model-View-Controller
  27. フレームワークの構造です 大まかにこの三つからできてます
  28. URLのアドレス 入力 GETやPOSTのパラメータ Controller Model View データの取得・加工・生成 出力 データベースへのアクセス HTMLをブラウザへ パスワード用ランダム文字列の生成 メールマガジン登録者へメール 受け取ったPOST値の加工
  29. よくあるパターン <?php require_once './session.inc'; // セッション require_once './database.inc'; // DBの定義 $param1 = $_POST["name"]; $param2 = $_POST["old"]; コントローラーでやるところ // 入力チェック // DBからデータを取得 モデルでやるところ ?> <html> <?php ビューのデータ // DBから取得したデータを適当に展開 foreach($result as $item) : ?> <div> <p><?php echo $item["hogehoge"]; ?></p> </div> <?php endforeach; ?> </html>
  30. Codeigniter
  31. PHPフレームワークのトレンド 世界で一番検索されている PHPのフレームワークです
  32. ベンチマーク フレームワーク Requests per second Symfony 2.1.6 34.77 CakePHP 2.2.5 63.05 Codeigniter 2.1.3 182.03 $ ab -c 10 -t 60 <URL> Symfony CakePHP Codeigniter RPS 0 50 100 150 200
  33. インストールが簡単 / /application/ 解凍すると既にこの形 /cache/ /config/ /controllers/ /core/ コントローラー /errors/ /helpers/ /hooks/ /language/ /libraries/ /logs/ /models/ モデル / third_party/ /views/ ビュー /system/ index.php
  34. コード量が少ない <?php class Demo extends CI_Controller { public function index() Codeigniter { $this->load->view('demo'); } } <?php App::uses('AppController', 'Controller'); class DemoController extends AppController { public $name = 'Demo'; CakePHP public $uses = array(); public function index() { $this->layout = null; $this->render(); } }
  35. その他の特徴 • おぼえる事が少ないので習得が短期間 • マニュアルが読みやすい • 機能は必要最低限 • 日本で人気のCakePHPと比べて規約が超ゆるい • 足りない機能の拡張も簡単 • ActiveRecord
  36. Codeigniterを触った後で Zend Frameworkをやろうと思うと 泣けます。悪い意味で。
  37. 問題点 • オンラインの日本語マニュアルが最新版に更新さ れてません(2.0.3止まり、最新版は2.1系) • ライセンスがちょっと特殊なのでGPLが絡むとき は気をつけてください
  38. CodeigniterのURL http://example.com/index.php/hello/world/dummy • hello: コントローラー • world: メソッド • dummy: パラメータ(省略可能) <?php class Hello extends CI_Controller { public function world($dummy) { $this->load->view('hw', array('prm'=>$dummy)); } }
  39. 他クラスの読み込み $this->load->ほにゃらら(); // Helper $this->load->helper('url'); echo prep_url('example.com'); // Library $this->load->library('session'); $this->session->set_userdata('AAA', 'BBB') // Model $this->load->model('hoge'); $this->hoge->get(); // View $this->load->view('hw');
  40. ActiveRecord 簡単に言うとデータベースからデータを抜いてくる時に SQLを直接書かないようにする仕組み <?php class Tekitou extends CI_Model { function __construct() { parent::__construct(); $this->load->database(); } SQLを書いてない public function get($uid) { $query = $this->db->get_where('user', array('id' => $uid)); return $query->result_array(); } }
  41. ActiveRecord $query = $this->db->query('SELECT * FROM user'); $query = $this->db->get('user'); return $query->result_array(); $query = $this->db->where('id', $uid)->get('user'); $query = $this->db->get_where('user', array('id' => $uid)); $query = $this->db->query('SELECT * FROM user WHERE id = ?', array($uid)); return $query->result_array();
  42. 広島でもCodeigniterがもうちょっと 流行るといいなぁ…
  43. 質疑応答
  44. ご清聴ありがとうございました
Advertisement