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フレームワークの比較

小規模 ←→ 大規模 単機能 CodeIgniter FuelPHP ↑ CakePHP Zend Framework 2 ↓ 高機能

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. ◦ エントリーポイントという考え方 公開するのは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 ベース を意識 イベント駆動タイプ デザインタイプに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 ◦ ◦ ◦ Zend_Controller サンプル ◦ ◦ ◦ フォームからの値入力

◦ 名前: ◦ 年: ◦ 月: ◦ 日:

◦ ◦

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

Captcha 入力フォーム ">
フォームからの値入力

ID : Input : Url :

再表示

COPYRIGHT 2014 KONEKTO, INC # 63 ビューファイル getnumber.phtml

Captcha 出力フォームフォーム

認証結果:
ID :
入力値:

">

再表示

COPYRIGHT 2014 KONEKTO, INC # 64 ビューファイル revalid.phtml Captcha 出力フォームフォーム (最認証用)

認証結果:
ID :
入力値:

">

再認証

ID : Input : Url :


再表示

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