PHPフレームワーク入門 Zend Framework 2 コネクト株式会社 アジェンダ フレームワークとは ◦ MVC とは Zend Framework 2 入門 ◦ Zend Framework 2 のインストールと動作確認 ◦ Zend Framework 2 を使用したシンプルな例題
Copyright 2014 konekto, Inc # 2 フレームワークとは
フレームワークを使用すると、高品質で均 一なのWEBアプリケーションを短期間に構 築できます。 開発効率の追求(基本)
フレームワーク
ライブラリ
サブルーチン/関数
独自開発
Copyright 2014 konekto, Inc # 4 開発効率の追求(極限)
パッケージソフト (半完成品 )
フレームワーク
テンプレートエンジン
隠蔽化 /抽象化
プログラム言語
Copyright 2014 konekto, Inc # 5 フレームワークの効果 開発工数の圧縮 ◦ コーディング工数 ◦ テスト工数 大規模開発における標準化と効率化 ◦ チーム開発 読みやすいコード化 コード量の圧縮 品質の均一化 メンテナンス性の向上
Copyright 2014 konekto, Inc # 6 コンピュータの5大機能
入力 出力 Web ブラウザ Web ブラウザ からの入力 への出力
記憶 演算 データベース データ加工 ファイル
制御 プログラムロ ジック
Copyright 2014 konekto, Inc # 7 アプリケーションの共通機能 汎用的な処理の共通化 ◦ ページ遷移とロジック ◦ MVC による役割の明確化 ◦ デザインとロジックの分離 ◦ 入力処理(サニタイズ) ◦ データベース処理 ◦ 隠蔽化 ◦ 認証処理/アクセス制御
Copyright 2014 konekto, Inc # 8 Zend Framework 2 の特徴 ビジネスで利用可能なフレームワーク ◦ Zend をはじめとした企業がコミュニティに参加 シンプルな構造 ◦ モジュール単位に利用可能 明確なライセンス体系 ◦ ビジネスで部分的に使用しても問題ない PHP 5.3 を採用
Copyright 2014 konekto, Inc # 9 代表的な PHPフレームワークの比較
小規模 ←→ 大規模 Laravel 単機能 CodeIgniter Yii FuelPHP ↑ CakePHP Zend Framework 2 ↓ 高機能 Symfony
Copyright 2014 konekto, Inc # 10 PHPフレームワークシェア
Copyright 2014 konekto, Inc # 11 話題性:Google トレンド
Copyright 2014 konekto, Inc # 12 MVCとは WEBプログラミングの手法として、スタン ダードになったMVCついて学習します。 フレームワークやオブジェクト指向のベース となる考え方ですので、把握することはス テップアップに不可欠です。 MVC 基礎知識
MVC とは… ◦ ソフトウェアの開発手法の一つ ◦ Model (モデル), View(ビュー), Controller (コントローラ)の 頭文字を合わせたもの ◦ プログラムを上記三つのパターンに分割して,それぞれの 役割ごとに処理を実装する手法
Copyright 2014 konekto, Inc # 14 MVC 基礎知識
それぞれの役割
パターン 役割 Model(モデル) データの出し入れと加工を行う View(ビュー) データの表示を行う Controller(コントローラ) ユーザから命令を受け付け,モデ ルやビューを繋げて処理を完成さ ◦ つまりシステムはデータを扱うものであり、データせる
Copyright 2014 konekto, Inc # 15 MVC 基礎知識
デザイン図 データ
モデル 処理要求 参照
コントローラ ビュー 表示要求
リクエスト レスポンス ユーザ側
Copyright 2014 konekto, Inc # 16 MVC 基礎知識
MVC の利点 ◦ 画面デザインと内部ロジックの分割 ◦ デザイナとプログラマの分業化 ◦ デザイン変更の容易化 ◦ ビュー作成を楽にするテンプレートエンジンの採用 ◦ 同じデータのI/O をモデルに集約することでオブジェクト指向 的な実装が可能 ◦ 役割分担による見やすいコーディング
Copyright 2014 konekto, Inc # 17 Zend Framework 2 のMVC
入口はすべてindex.php ◦ エントリーポイントという考え方 公開するのはindex.php のみ ◦ 設定ファイルやライブラリは直接アクセス禁止 ◦ ただし画像とかCSS とかJavaScript は別 指定されたURL にしたがって処理決定 ◦ モジュール/コントローラー/アクション ビュー ◦ HTML などをレンダリングする ◦ 全ての処理が完了してからレンダリング開始
Copyright 2014 konekto, Inc # 18 MVC テンプレートエンジン
PHP テンプレートエンジンとは? ◦ ビューを担うPHP のライブラリ ◦ ビューファイルに相当するHTML ライクのものをテンプ レートと呼ぶ ◦ 書式は簡単だが独自のもの ◦ 変数や、簡単な条件文( if )、ループなどの制御をサポート ◦ 表示に特化しているので、 HTML エスケープや数値や日付の書式 変換が得意
Copyright 2014 konekto, Inc # 19 MVC テンプレートエンジン テンプレートエンジンの目的 ◦ プログラマとデザイナの作業分担を明確化 ◦ デザイン変更に対する柔軟性を高める ◦ ロジックをよりシンプルに ◦ 余計な処理を挟まない分、すっきりしたものに
Copyright 2014 konekto, Inc # 20 リライト処理 リライトエンジン ◦ URL で指定された内容を目的に応じて書き換える機能 ◦ 1つのWeb ページ(アプリ:コントローラ)が受け取って処理 を分岐する
Copyright 2014 konekto, Inc # 21 Zend Framework 2 ZEND FRAMEWORK 1 と ZEND FRAMEWORK 2 の違いとは ZF1とZF2の違い PHP 5.3 ベース ◦ ZF1 はPHP 5.1 ベース NameSpace を意識 イベント駆動タイプ デザインタイプにDI(Dependency Injection) を採用
Copyright 2014 konekto, Inc # 23 Zend Server が提供する ZF
Zend と提供企業が提供する企業向けの新たな Web システム環境 企業ユーザが望むプロ仕様の PHP 環境を提供 – 高信頼性と高速性を両立した PHP 環境の提供 – Web アプリ単位の監視機能を提供 – 稼動後の運用管理の容易さ – 開発効率の向上 – モバイル環境への対応
サーバ管理GUI MySQL/DB2 Zend Framework 1 & 2 デプロイ機能 データベースドライバ 高速化 拡張モジュール デバッグ JVM との連携 PHP実行環境 モニタリング ジョブキュー Apache(IHS) コードトレーシング XML Tool Kit
Copyright 2014 konekto, Inc # 24 Zend Server 6.1
Copyright 2014 konekto, Inc # 25 Zend Server 7.0
Copyright 2014 konekto, Inc # 26 Zend Framework 2 インストールと動作確認
ZEND FRAMEWORK 2 の配置と動作確 認ようにスケルトンプロジェクトの配置を行 います。 ベース環境の構築
Zend Framework 2 の必要条件 ◦ Web サーバ ◦ リライトエンジン(mod_rewrite など) ◦ PHP 5.3.x ◦ HTML5 対応ブラウザ
Copyright 2014 konekto, Inc # 28 インストール手順①
Web サーバとPHP 5.3 環境を用意 ◦ Zend Server 6 以上の場合 ◦ Zend Framework と Zend Framework 2 インストール済 ◦ 手順③へ
◦ XAMPP などの場合 ◦ Zend Framework 2 独自にインストール
Copyright 2014 konekto, Inc # 29 インストール手順②
Zend Framework 2を入手 ◦ http://framework.zend.com/downloads/latest ◦ ZendFramework-2.3.3.zip *10/10 現在 ◦ 適当に展開(別途説明)
Copyright 2014 konekto, Inc # 30 インストール手順③
スケルトンプロジェクトの入手 ◦ https://github.com/zendframework/ZendSkeletonApplication ◦ ZendSkeletonApplication-master.zip
Copyright 2014 konekto, Inc # 31 インストール手順④ スケルトンプロジェクトの配置 ◦ 適当に展開します ◦ public ディレクトリをドキュメントルートへ ◦ ディレクトリ名を ZendSkeleton に変更 ◦ 残りを適当に配置します ◦ ディレクトリ名を ZendSkeleton に変更
具体例を次ページで解説します
Copyright 2014 konekto, Inc # 32 インストール手順④ 補完
圧縮ファイル内部 ¥ エントリーポイントの配置 (Web サーバのドキュメントルート ) ├─config ◦ XAMPP の場合 │ └─autoload ◦ c:¥xampp¥htdocs¥ZendSkeleton ├─data │ └─cache ├─module アプリ実態の配置( Web サーバのドキュメントルート以外) │ └─Applicaon ◦ XAMPP の場合 │ ├─config ◦ c:¥xampp¥ZendSkeleton │ ├─language │ ├─src │ │ └─Applicaon │ │ └─Controller Zend Framework 2 の配置 (Web サーバのライブラリ置き場 ) │ └─view ◦ XAMPP の場合 │ ├─applicaon ◦ C:¥xampp¥Library │ │ └─index │ ├─error │ └─layout ├─public │ ├─css │ ├─fonts │ ├─img │ └─js └─vendor
COPYRIGHT 2014 KONEKTO, INC # 33 インストール手順⑤
エントリーポイントindex.php の設定 ◦ ディレクトリ C:¥xampp¥htdocs¥ZendSkeleton ◦ ファイル名 index.php ◦ 場所 6行目と8行目付近 ◦ Zend Framework 2 へのパス設定 ◦ カレントディレクトリをアプリ実態へ
◦ index.php の内容 (XAMPP の例 )
◦ putenv("ZF2_PATH=" . 'C:¥xampp¥Library¥ZendFramework-2.3.3¥library');
◦ chdir('c:¥xampp¥ZendSkeleton');
Copyright 2014 konekto, Inc # 34 インストール手順⑥ スケルトンプロジェクトの動作確認 ◦ URL http://127.0.0.1/ZendSkeleton/
OK NG
Copyright 2014 konekto, Inc # 35 Zend Framework 2 基本概念
ZEND FRAMEWORK 2 の基本的な概念 を説明します。 リクエストURLとデフォルト
◦ http:// ドメイン /モジュール/コントローラ /アクション ◦ http://127.0.0.1/ZendSkeleton/ ◦ http://127.0.0.1/ZendSkeleton/application/index/index
Copyright 2014 konekto, Inc # 37 モジュール概念
アプリケーション
モジュール モジュール モジュール Model Model Model
View View View
Controller Controller Controller Action Action Action Action Action Action
Copyright 2014 konekto, Inc # 38 スケルトンプロジェクトで確認
圧縮ファイル内部 ¥ ├─ config │ └─ autoload ├─data │ └─cache ├─module │ └─Application モジュール │ ├─ config │ ├─language │ ├─ src │ │ └─Application │ │ └─Controller コントローラー │ └─view │ ├─application │ │ ├─index index コントローラのビューファイル │ │ └─user user コントローラのビューファイル │ ├─error │ └─layout └─vendor └─ZF2
Copyright 2014 konekto, Inc # 39 Zend Framework 2 例題による入門
簡単な例題を通して ZEND FRAMEWORK 2 の基本動作を説明します Zend Framework 2 例題 コントローラーおよびアクションの作成 アクションからビューで値の受け渡し FORMから値を取得
Captcha による認証処理
Copyright 2014 konekto, Inc # 41 例題1 コントローラー/アクションの作成
◦ コントローラーおよびアクションを作成 ◦C:¥xampp¥ZendSkeleton¥module¥Application¥src¥Application¥Controller にUserController.php をコピー ◦ コントロールを登録 C:¥xampp¥ZendSkeleton¥module¥Application¥config のmodule.config.php を修正 ◦ ビューを配置 C:¥xampp¥ZendSkeleton¥module¥Application¥view¥application¥user にtokyo.phtml をコ ピー
◦ 以下の URL にアクセスして出力結果を確認しましょう。 ◦ http://127.0.0.1/ZendSkeleton/application/user/tokyo
Copyright 2014 konekto, Inc # 42 例題1 コントローラー/アクションの作成
◦ http://127.0.0.1/ZendSkeleton/application/user/tokyo
Copyright 2014 konekto, Inc # 43 例題2 値の受け渡し
◦ ビューを配置 C:¥xampp¥ZendSkeleton¥module¥Application¥view¥application¥user にosaka.phtml を コピー
◦ 以下の URL にアクセスして出力結果を確認しましょう。 ◦ http://127.0.0.1/ZendSkeleton/application/user/osaka
Copyright 2014 konekto, Inc # 44 例題2 値の受け渡し
◦ http://127.0.0.1/ZendSkeleton/application/user/osaka
Copyright 2014 konekto, Inc # 45 例題3 FORMから値を取得
◦ フォームを配置 ◦C:¥xampp¥htdocs¥ZendSkeleton¥にform.html をコピー ◦ ビューを配置 C:¥xampp¥ZendSkeleton¥module¥Application¥view¥application¥user にkyoto.phtml を コピー
◦ 以下の URL にアクセスして出力結果を確認しましょう。 ◦ http://127.0.0.1/ZendSkeleton/application/user/kyoto
Copyright 2014 konekto, Inc # 46 例題3 FORMから値を取得
◦ http://127.0.0.1/ZendSkeleton/form.html
Copyright 2014 konekto, Inc # 47 例題コースコード
簡単な例題を通してZEND FRAMEWORK 2 の基本動作を説明します エントリーポイント Index.php ◦
◦// Decline static file requests back to the PHP built-in webserver ◦if (php_sapi_name() === 'cli-server' && is_file(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))) { ◦ return false; ◦}
◦// Setup autoloading ◦require 'init_autoloader.php';
◦// Run the application! ◦Zend¥Mvc¥Application::init(require 'config/application.config.php')->run();
Copyright 2014 konekto, Inc # 49 コントローラーの登録
module.config.php の76 行目
◦ 'controllers' => array( ◦ 'invokables' => array( ◦ 'Application¥Controller¥Index' => 'Application¥Controller¥IndexController', ◦ 'Application¥Controller¥User' => 'Application¥Controller¥UserController', ◦ ), ◦ ),
Copyright 2014 konekto, Inc # 50 コントローラーとアクション
IndexController.php ◦
◦namespace Application¥Controller;
◦use Zend¥Mvc¥Controller¥AbstractActionController; ◦use Zend¥View¥Model¥ViewModel;
◦class IndexController extends AbstractActionController ◦{ ◦ public function indexAction() ◦ { ◦ return new ViewModel(); ◦ } ◦}
Copyright 2014 konekto, Inc # 51 コントローラーとアクション
◦class UserController extends AbstractActionController ◦{ ◦ public function tokyoAction() ◦ { ◦ return new ViewModel(); ◦ } ◦ ◦ public function osakaAction() ◦ { ◦ $data = array( ◦ 'key1' => ' あいうえお', ◦ 'key2' => ' いろは ' ◦ ); ◦ return new ViewModel($data); ◦ } ◦ ◦ public function kyotoAction() ◦ { ◦ $data = array( ◦ 'name' => $this->params()->fromPost( 'name' ), ◦ 'year' => $this->params()->fromPost( 'year' ), ◦ 'month' => $this->params()->fromPost( 'month' ), ◦ 'day' => $this->params()->fromPost( 'day' ) ◦ ); ◦ return new ViewModel($data); ◦ } ◦}
Copyright 2014 konekto, Inc # 52 FORM form.html ◦ ◦
◦ ◦◦ ◦
◦ ◦
Copyright 2014 konekto, Inc # 53 ビューファイル
tokyo.phtml kyoto.phtml
モジュール名: Application
モジュール名: Application
コントローラ名: User
コントローラ名: User
アクション名: tokyo
アクション名: kyoto
です。
osaka.phtml
モジュール名: Application
コントローラ名: User
アクション名: osaka
データ:
データ:
COPYRIGHT 2014 KONEKTO, INC # 54 参考資料 書籍 ◦ Zend Framework 2 徹底解説 ◦ 著者:濱田優 ◦ 定価: 3,600 円(税別) ◦ ISBN978-4-7980-4011-0
# 55 Captcha機能による認証
簡単なコードで、CAPTCHA機能を実現で きます。 入力画面
# 57 認証失敗
# 58 認証成功
# 59 コントローラー 先頭部分抜粋
{
Copyright 2014 konekto, Inc # 60 public function setimageAction() { //インスタンスを生成 アクション① $captcha = new Captcha¥Image(); //識別名を設定 $captcha->setName('foo'); //文字数 $captcha->setWordLen(6); //タイムアウト $captcha->setTimeout(500); //画像保存期間 $captcha->setExpiration(500); //フォントファイルおよびサイズ $captcha->setFont('C:¥WINDOWS¥Fonts¥ARIAL.TTF'); $captcha->setFontSize(80); //作成する画像サイズ //画像の保存先 $captcha->setWidth(800); $captcha->setImgDir( 'c:/xampp/htdocs' ); $captcha->setheight(300); //画像へのURL $captcha->setImgUrl('/'); //キャプチャの作成とID取得 $id = $captcha->generate(); //画像URL作成 $imageUrl = $captcha->getImgUrl() . $id . $captcha->getSuffix(); $data = array( 'url' => $imageUrl, 'id' => $id ); return new ViewModel($data); }
Copyright 2014 konekto, Inc # 61 public function getnumberAction() { //フォームの入力値取得 $id = $this->params()->fromPost( 'id' ); アクション② $number = $this->params()->fromPost( 'number' ); //インスタンス生成 $auth = new Captcha¥Image(); //表示時にセットした名前と同じもの $auth->setName('foo');
//認証(判定)処理 if( $auth->isValid( array('id' => $id, 'input' => $number) ) ){ $msg = "認証成功"; }else{ $msg = "認証失敗"; }
//結果データ作成 $data = array( 'msg' => $msg, 'input' => $number, 'id' => $id, 'imgurl' => $this->params()->fromPost( 'url' ) );
$view = new ViewModel($data);
//再認証用テンプレート選択 if( $msg == "認証失敗" ) $view->setTemplate('application/captcha/revalid.phtml'); return $view; } Copyright 2014 konekto, Inc # 62 ビューファイル setimage.phtml
フォームからの値入力
再表示
COPYRIGHT 2014 KONEKTO, INC # 63 ビューファイル getnumber.phtml
認証結果:
ID :
入力値:
">
COPYRIGHT 2014 KONEKTO, INC # 64 ビューファイル revalid.phtml
認証結果:
ID :
入力値:
">
再認証
再表示
COPYRIGHT 2014 KONEKTO, INC # 65 例題ファイルの内容 ZF2code.zip
>tree /F C:. └─view │ form.html ├─applicaon │ index.php │ ├─captcha │ │ │ getnumber.phtml ├─config │ │ revalid.phtml │ module.config.php │ │ semage.phtml │ │ │ ├ ├─src │ ─index │ └─Applicaon │ │ index.phtml │ └─Controller │ │ │ CaptchaController.php │ └─user │ IndexController.php │ kyoto.phtml │ UserController.php │ osaka.phtml │ │ tokyo.phtml └─view │ ├─error index.php とform.html は、 │ 404.phtml c:¥xampp¥htdocs¥ZendSkeleton へ │ index.phtml それ以外のディレクトは、 │ c:¥xampp¥ZendSkeleton¥module¥Application へ └─layout layout.phtml *オリジナルから変更なし
Copyright 2014 konekto, Inc # 66