Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
アジェンダフレームワークとは◦ MVCとは
Zend Framework 2入門◦ Zend Framework 2のインストールと動作確認
◦ Zend Framework 2を使用したシンプルな例題
# 2Copyright 2014 konekto, Inc
フレームワークの効果開発工数の圧縮◦ コーディング工数
◦テスト工数
大規模開発における標準化と効率化◦チーム開発
読みやすいコード化
コード量の圧縮
品質の均一化
メンテナンス性の向上
# 6Copyright 2014 konekto, Inc
コンピュータの5大機能
入力Webブラウザからの入力
出力Webブラウザへの出力
記憶データベースファイル
演算データ加工
制御プログラムロジック
# 7Copyright 2014 konekto, Inc
アプリケーションの共通機能汎用的な処理の共通化◦ページ遷移とロジック◦ MVCによる役割の明確化
◦ デザインとロジックの分離
◦入力処理(サニタイズ)
◦データベース処理◦ 隠蔽化
◦認証処理/アクセス制御
# 8Copyright 2014 konekto, Inc
Zend Framework 2の特徴ビジネスで利用可能なフレームワーク◦ Zendをはじめとした企業がコミュニティに参加
シンプルな構造◦モジュール単位に利用可能
明確なライセンス体系◦ビジネスで部分的に使用しても問題ない
PHP 5.3を採用
# 9Copyright 2014 konekto, Inc
代表的なPHPフレームワークの比較
小規模 ←→ 大規模
単機能
Laravel
CodeIgniter
FuelPHP
Yii
↑
↓CakePHP Zend Framework 2
高機能 Symfony
# 10Copyright 2014 konekto, Inc
MVC基礎知識
MVCとは…
◦ ソフトウェアの開発手法の一つ
◦ Model(モデル),View(ビュー),Controller(コントローラ)の頭文字を合わせたもの
◦プログラムを上記三つのパターンに分割して,それぞれの役割ごとに処理を実装する手法
# 14Copyright 2014 konekto, Inc
MVC基礎知識
それぞれの役割
◦つまりシステムはデータを扱うものであり、データ
パターン 役割
Model(モデル) データの出し入れと加工を行う
View(ビュー) データの表示を行う
Controller(コントローラ) ユーザから命令を受け付け,モデ
ルやビューを繋げて処理を完成さ
せる
# 15Copyright 2014 konekto, Inc
MVC基礎知識
MVCの利点◦画面デザインと内部ロジックの分割◦ デザイナとプログラマの分業化
◦ デザイン変更の容易化
◦ ビュー作成を楽にするテンプレートエンジンの採用
◦同じデータのI/Oをモデルに集約することでオブジェクト指向的な実装が可能
◦役割分担による見やすいコーディング
# 17Copyright 2014 konekto, Inc
Zend Framework 2のMVC
入口はすべてindex.php◦エントリーポイントという考え方
公開するのはindex.phpのみ◦設定ファイルやライブラリは直接アクセス禁止◦ただし画像とかCSSとかJavaScriptは別
指定されたURLにしたがって処理決定◦モジュール/コントローラー/アクション
ビュー◦ HTMLなどをレンダリングする◦ 全ての処理が完了してからレンダリング開始
# 18Copyright 2014 konekto, Inc
MVCテンプレートエンジン
PHPテンプレートエンジンとは?◦ビューを担うPHPのライブラリ
◦ビューファイルに相当するHTMLライクのものをテンプレートと呼ぶ
◦書式は簡単だが独自のもの◦ 変数や、簡単な条件文(if)、ループなどの制御をサポート
◦ 表示に特化しているので、HTMLエスケープや数値や日付の書式変換が得意
# 19Copyright 2014 konekto, Inc
MVCテンプレートエンジン
テンプレートエンジンの目的◦プログラマとデザイナの作業分担を明確化
◦デザイン変更に対する柔軟性を高める
◦ロジックをよりシンプルに◦ 余計な処理を挟まない分、すっきりしたものに
# 20Copyright 2014 konekto, Inc
リライト処理リライトエンジン◦ URLで指定された内容を目的に応じて書き換える機能
◦ 1つのWebページ(アプリ:コントローラ)が受け取って処理を分岐する
# 21Copyright 2014 konekto, Inc
ZF1とZF2の違いPHP 5.3ベース◦ ZF1はPHP 5.1ベース
NameSpaceを意識
イベント駆動タイプ
デザインタイプにDI(Dependency Injection)を採用
# 23Copyright 2014 konekto, Inc
Zend Server が提供する ZFZendと提供企業が提供する企業向けの新たなWebシステム環境
企業ユーザが望むプロ仕様のPHP環境を提供– 高信頼性と高速性を両立したPHP環境の提供
– Webアプリ単位の監視機能を提供
– 稼動後の運用管理の容易さ
– 開発効率の向上
– モバイル環境への対応
サーバ管理GUI
Zend Framework 1 & 2
データベースドライバ
拡張モジュール
PHP実行環境
Apache(IHS)
MySQL/DB2
デプロイ機能
高速化
デバッグ
JVMとの連携
モニタリング
ジョブキュー
コードトレーシング
XML Tool Kit
# 24Copyright 2014 konekto, Inc
ベース環境の構築Zend Framework 2の必要条件◦ Webサーバ◦ リライトエンジン(mod_rewriteなど)
◦ PHP 5.3.x
◦ HTML5対応ブラウザ
# 28Copyright 2014 konekto, Inc
インストール手順①WebサーバとPHP 5.3環境を用意◦ Zend Server 6以上の場合◦ Zend Frameworkと Zend Framework 2インストール済
◦ 手順③へ
◦ XAMPPなどの場合◦ Zend Framework 2独自にインストール
# 29Copyright 2014 konekto, Inc
インストール手順②
Zend Framework 2を入手◦ http://framework.zend.com/downloads/latest
◦ ZendFramework-2.3.3.zip *10/10現在
◦適当に展開(別途説明)
# 30Copyright 2014 konekto, Inc
インストール手順③
スケルトンプロジェクトの入手◦ https://github.com/zendframework/ZendSkeletonApplication
◦ ZendSkeletonApplication-master.zip
# 31Copyright 2014 konekto, Inc
インストール手順④スケルトンプロジェクトの配置◦適当に展開します
◦ publicディレクトリをドキュメントルートへ◦ ディレクトリ名を ZendSkeletonに変更
◦残りを適当に配置します◦ ディレクトリ名を ZendSkeletonに変更
具体例を次ページで解説します
# 32Copyright 2014 konekto, Inc
インストール手順④補完
圧縮ファイル内部¥
├─config
│ └─autoload
├─data
│ └─cache
├─module
│ └─Applica�on
│ ├─config
│ ├─language
│ ├─src
│ │ └─Applica�on
│ │ └─Controller
│ └─view
│ ├─applica�on
│ │ └─index
│ ├─error
│ └─layout
├─public
│ ├─css
│ ├─fonts
│ ├─img
│ └─js
└─vendor
エントリーポイントの配置(Webサーバのドキュメントルート)
◦ XAMPPの場合
◦ c:¥xampp¥htdocs¥ZendSkeleton
アプリ実態の配置(Webサーバのドキュメントルート以外)
◦ XAMPPの場合
◦ c:¥xampp¥ZendSkeleton
Zend Framework 2の配置(Webサーバのライブラリ置き場)
◦ XAMPPの場合
◦ C:¥xampp¥Library
# 33COPYRIGHT 2014 KONEKTO, INC
インストール手順⑤
エントリーポイント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');
# 34Copyright 2014 konekto, Inc
リクエストURLとデフォルト◦ http://ドメイン/モジュール/コントローラ/アクション
◦ http://127.0.0.1/ZendSkeleton/
◦ http://127.0.0.1/ZendSkeleton/application/index/index
# 37Copyright 2014 konekto, Inc
モジュール概念
アプリケーション
モジュール
Model
View
Controller
Action
Action
モジュール
Model
View
Controller
Action
Action
モジュール
Model
View
Controller
Action
Action
# 38Copyright 2014 konekto, Inc
スケルトンプロジェクトで確認圧縮ファイル内部
¥
├─config
│ └─autoload
├─data
│ └─cache
├─module
│ └─Application モジュール
│ ├─config
│ ├─language
│ ├─src
│ │ └─Application
│ │ └─Controller コントローラー
│ └─view
│ ├─application
│ │ ├─index indexコントローラのビューファイル
│ │ └─user userコントローラのビューファイル
│ ├─error
│ └─layout
└─vendor
└─ZF2
# 39Copyright 2014 konekto, Inc
Zend Framework 2例題コントローラーおよびアクションの作成
アクションからビューで値の受け渡し
FORMから値を取得
Captchaによる認証処理
# 41Copyright 2014 konekto, Inc
例題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
# 42Copyright 2014 konekto, Inc
例題1コントローラー/アクションの作成
◦ http://127.0.0.1/ZendSkeleton/application/user/tokyo
# 43Copyright 2014 konekto, Inc
例題2値の受け渡し
◦ ビューを配置C:¥xampp¥ZendSkeleton¥module¥Application¥view¥application¥userにosaka.phtmlをコピー
◦ 以下のURLにアクセスして出力結果を確認しましょう。
◦ http://127.0.0.1/ZendSkeleton/application/user/osaka
# 44Copyright 2014 konekto, Inc
例題3FORMから値を取得
◦ フォームを配置
◦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
# 46Copyright 2014 konekto, Inc
エントリーポイントIndex.php
◦<?php
◦/**
◦ * This makes our life easier when dealing with paths. Everything is relative
◦ * to the application root now.
◦ */
◦ putenv("ZF2_PATH=" . 'C:¥xampp¥Library¥ZendFramework-2.3.3¥library');
◦
◦//chdir(dirname(__DIR__));
◦chdir('c:¥xampp¥ZendSkeleton');
◦// 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();
# 49Copyright 2014 konekto, Inc
コントローラーの登録
module.config.phpの76行目
◦ 'controllers' => array(
◦ 'invokables' => array(
◦ 'Application¥Controller¥Index' => 'Application¥Controller¥IndexController',
◦ 'Application¥Controller¥User' => 'Application¥Controller¥UserController',
◦ ),
◦ ),
# 50Copyright 2014 konekto, Inc
コントローラーとアクション
IndexController.php◦<?php
◦/**
◦ * Zend Framework (http://framework.zend.com/)
◦ *
◦ * @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
◦ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
◦ * @license http://framework.zend.com/license/new-bsd New BSD License
◦ */
◦namespace Application¥Controller;
◦use Zend¥Mvc¥Controller¥AbstractActionController;
◦use Zend¥View¥Model¥ViewModel;
◦class IndexController extends AbstractActionController
◦{
◦ public function indexAction()
◦ {
◦ return new ViewModel();
◦ }
◦}
# 51Copyright 2014 konekto, Inc
コントローラーとアクション◦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);
◦ }
◦}
# 52Copyright 2014 konekto, Inc
FORM
form.html◦<html>
◦ <head>
◦ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
◦ <title>Zend_Controllerサンプル</title>
◦ </head>
◦ <body>
◦ フォームからの値入力<br>
◦ <form action="http://127.0.0.1/ZendSkeleton/application/user/kyoto" method="POST">
◦ 名前:<input type="text" name="name" value="お名前">
◦ 年:<input type="text" name="year" value="2000">
◦ 月:<input type="text" name="month" value="12">
◦ 日:<input type="text" name="day" value="31">
◦ <input type="submit" value="送信">
◦ </form>
◦ <br>
◦ </body>
◦</html>
# 53Copyright 2014 konekto, Inc
ビューファイル
tokyo.phtml<p>
モジュール名:Application<br>
コントローラ名:User<br>
アクション名:tokyo<br>
</p>
osaka.phtml<p>
モジュール名:Application<br>
コントローラ名:User<br>
アクション名:osaka<br>
データ:<?php echo $key1; ?> <br>
データ:<?php echo $key2; ?> <br>
</p>
kyoto.phtml<p>
モジュール名:Application<br>
コントローラ名:User<br>
アクション名:kyoto<br>
<?php echo $name; ?>さんの誕生日は、<br>
<?php echo $year."年".$month."月".$day."日"; ?> です。<br>
</p>
COPYRIGHT 2014 KONEKTO, INC # 54
コントローラー先頭部分抜粋<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Application¥Controller;
use Zend¥Mvc¥Controller¥AbstractActionController;
use Zend¥View¥Model¥ViewModel;
use Zend¥Captcha;
class CaptchaController extends AbstractActionController
{
# 60Copyright 2014 konekto, Inc
# 61
//画像の保存先
$captcha->setImgDir( 'c:/xampp/htdocs' );
//画像へのURL
$captcha->setImgUrl('/');
//キャプチャの作成とID取得
$id = $captcha->generate();
//画像URL作成
$imageUrl = $captcha->getImgUrl() . $id . $captcha->getSuffix();
$data = array(
'url' => $imageUrl,
'id' => $id
);
return new ViewModel($data);
}
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->setheight(300);
アクション①
Copyright 2014 konekto, Inc
# 62
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
COPYRIGHT 2014 KONEKTO, INC # 63
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Captcha入力フォーム</title>
</head>
<img src="<?php echo $url; ?>"><br>
<body>
フォームからの値入力<br>
<form action="http://127.0.0.1/ZendSkeleton/application/captcha/getnumber" method="POST">
ID:<input type="text" name="id" value="<?php echo $id; ?>">
Input:<input type="text" name="number" value="?">
Url:<input type="text" name="url" value="<?php echo $url; ?>">
<input type="submit" value="送信">
</form>
<br>
<a href="http://127.0.0.1/ZendSkeleton/application/captcha/setimage">再表示</a>
</body>
</html>
ビューファイル setimage.phtml
COPYRIGHT 2014 KONEKTO, INC # 64
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Captcha出力フォームフォーム</title>
</head>
<p>
認証結果:<?php echo $msg; ?> <br>
ID:<?php echo $id; ?> <br>
入力値:<?php echo $input; ?> <br><br>
<img src="<?php echo $imgurl; ?>"><br><br>
</p>
<a href="http://127.0.0.1/ZendSkeleton/application/captcha/setimage">再表示</a>
</html>
ビューファイル getnumber.phtml
COPYRIGHT 2014 KONEKTO, INC # 65
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Captcha出力フォームフォーム(最認証用)</title>
</head>
<p>
認証結果:<?php echo $msg; ?> <br>
ID:<?php echo $id; ?> <br>
入力値:<?php echo $input; ?> <br><br>
<img src="<?php echo $imgurl; ?>"><br><br>
</p>
<p>
再認証<br>
<form action="http://127.0.0.1/ZendSkeleton/application/captcha/getnumber" method="POST">
ID:<input type="text" name="id" value="<?php echo $id; ?>">
Input:<input type="text" name="number" value="?">
Url:<input type="text" name="url" value="<?php echo $imgurl; ?>">
<input type="submit" value="送信">
</form>
</p>
<br>
<a href="http://127.0.0.1/ZendSkeleton/application/captcha/setimage">再表示</a>
</html>
ビューファイル revalid.phtml
例題ファイルの内容 ZF2code.zip>tree /F
C:.
│ form.html
│ index.php
│
├─config
│ module.config.php
│
├─src
│ └─Applica�on
│ └─Controller
│ CaptchaController.php
│ IndexController.php
│ UserController.php
│
└─view
# 66
└─view
├─applica�on
│ ├─captcha
│ │ getnumber.phtml
│ │ revalid.phtml
│ │ se�mage.phtml
│ │
│ ├─index
│ │ index.phtml
│ │
│ └─user
│ kyoto.phtml
│ osaka.phtml
│ tokyo.phtml
│
├─error
│ 404.phtml
│ index.phtml
│
└─layout
layout.phtml
index.phpとform.htmlは、
c:¥xampp¥htdocs¥ZendSkeleton へ
それ以外のディレクトは、c:¥xampp¥ZendSkeleton¥module¥Application へ
*オリジナルから変更なし
Copyright 2014 konekto, Inc