• 検索結果がありません。

Microsoft PowerPoint - PHPフレームワーク.ppt [互換モード]

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - PHPフレームワーク.ppt [互換モード]"

Copied!
66
0
0

読み込み中.... (全文を見る)

全文

(1)

PHPフレームワーク入門

Zend Framework 2

(2)

アジェンダ

フレームワークとは

MVCとは

Zend Framework 2 入門

Zend Framework 2 のインストールと動作確認

Zend Framework 2 を使用したシンプルな例題

(3)

フレームワークとは

(4)

開発効率の追求(基本)

フレームワーク

ライブラリ

サブルーチン/関数

独自開発

(5)

開発効率の追求(極限)

パッケージソフト

(半完成品)

フレームワーク

テンプレートエンジン

隠蔽化/抽象化

(6)

フレームワークの効果

開発工数の圧縮

コーディング工数

テスト工数

大規模開発における標準化と効率化

チーム開発

読みやすいコード化

コード量の圧縮

品質の均一化

メンテナンス性の向上

(7)

コンピュータの5大機能

入力

Web

ブラウザ

からの入力

出力

Web

ブラウザ

への出力

記憶

データベース

ファイル

演算

データ加工

(8)

アプリケーションの共通機能

汎用的な処理の共通化

ページ遷移とロジック

MVCによる役割の明確化

デザインとロジックの分離

入力処理(サニタイズ)

データベース処理

隠蔽化

認証処理/アクセス制御

(9)

Zend Framework 2 の特徴

ビジネスで利用可能なフレームワーク

Zendをはじめとした企業がコミュニティに参加

シンプルな構造

モジュール単位に利用可能

明確なライセンス体系

ビジネスで部分的に使用しても問題ない

PHP 5.3 を採用

(10)

代表的な

PHPフレームワークの比較

小規模

←→

大規模

単機能

Laravel

CodeIgniter

FuelPHP

Yii

CakePHP

Zend Framework 2

(11)
(12)
(13)

MVCとは

(14)

MVC

基礎知識

MVCとは

ソフトウェアの開発手法の一つ

Model(モデル),View(ビュー),Controller(コントローラ)の

頭文字を合わせたもの

プログラムを上記三つのパターンに分割して,それぞれの

役割ごとに処理を実装する手法

(15)

MVC

基礎知識

それぞれの役割

つまりシステムはデータを扱うものであり、データ

パターン

役割

Model(モデル)

データの出し入れと加工を行う

View(ビュー)

データの表示を行う

Controller(コントローラ)

ユーザから命令を受け付け,モデ

ルやビューを繋げて処理を完成さ

せる

(16)

MVC

基礎知識

デザイン図

モデル

ビュー

コントローラ

ユーザ側

リクエスト

レスポンス

処理要求

表示要求

参照

データ

(17)

MVC

基礎知識

MVCの利点

画面デザインと内部ロジックの分割

デザイナとプログラマの分業化

デザイン変更の容易化

ビュー作成を楽にするテンプレートエンジンの採用

同じデータのI/Oをモデルに集約することでオブジェクト指向

的な実装が可能

役割分担による見やすいコーディング

(18)

Zend Framework 2 のMVC

入口はすべてindex.php

エントリーポイントという考え方

公開するのはindex.phpのみ

設定ファイルやライブラリは直接アクセス禁止

ただし画像とかCSSとかJavaScriptは別

指定されたURLにしたがって処理決定

モジュール/コントローラー/アクション

ビュー

HTMLなどをレンダリングする

全ての処理が完了してからレンダリング開始

(19)

MVC

テンプレートエンジン

PHPテンプレートエンジンとは?

ビューを担うPHPのライブラリ

ビューファイルに相当するHTMLライクのものをテンプ

レートと呼ぶ

書式は簡単だが独自のもの

変数や、簡単な条件文(if)、ループなどの制御をサポート

表示に特化しているので、HTMLエスケープや数値や日付の書式

変換が得意

(20)

MVC

テンプレートエンジン

テンプレートエンジンの目的

プログラマとデザイナの作業分担を明確化

デザイン変更に対する柔軟性を高める

ロジックをよりシンプルに

余計な処理を挟まない分、すっきりしたものに

(21)

リライト処理

リライトエンジン

URLで指定された内容を目的に応じて書き換える機能

1つのWebページ(アプリ:コントローラ)が受け取って処理

(22)

Zend Framework 2

Z E N D F R A M E W O R K 1

と ZEND

(23)

ZF1とZF2の違い

PHP 5.3ベース

ZF1はPHP 5.1ベース

NameSpaceを意識

イベント駆動タイプ

デザインタイプにDI(Dependency Injection)を採用

(24)

Zend Server が提供する ZF

Zendと提供企業が提供する企業向けの新たなWebシステム環境

企業ユーザが望むプロ仕様のPHP環境を提供

高信頼性と高速性を両立したPHP環境の提供

Webアプリ単位の監視機能を提供

稼動後の運用管理の容易さ

開発効率の向上

モバイル環境への対応

サーバ管理GUI

Zend Framework 1 & 2

データベースドライバ

拡張モジュール

PHP実行環境

Apache(IHS)

MySQL/DB2

デプロイ機能

高速化

デバッグ

JVM

との連携

モニタリング

ジョブキュー

コードトレーシング

XML Tool Kit

(25)
(26)
(27)

Zend Framework 2

インストールと動作確認

(28)

ベース環境の構築

Zend Framework 2 の必要条件

Webサーバ

リライトエンジン(mod_rewriteなど)

PHP 5.3.x

HTML5対応ブラウザ

(29)

インストール手順①

WebサーバとPHP 5.3環境を用意

Zend Server 6 以上の場合

Zend Framework と Zend Framework 2 インストール済

手順③へ

XAMPPなどの場合

(30)

インストール手順②

Zend Framework 2を入手

http://framework.zend.com/downloads/latest

ZendFramework-2.3.3.zip *10/10現在

(31)

インストール手順③

スケルトンプロジェクトの入手

https://github.com/zendframework/ZendSkeletonApplication

ZendSkeletonApplication-master.zip

(32)

インストール手順④

スケルトンプロジェクトの配置

適当に展開します

publicディレクトリをドキュメントルートへ

ディレクトリ名を ZendSkeleton に変更

残りを適当に配置します

ディレクトリ名を ZendSkeleton に変更

具体例を次ページで解説します

(33)

インストール手順④ 補完

圧縮ファイル内部 ¥ ├─config │ └─autoload ├─data │ └─cache ├─module │ └─Applica on │ ├─config │ ├─language │ ├─src │ │ └─Applica on │ │ └─Controller │ └─view │ ├─applica on │ │ └─index エントリーポイントの配置(Webサーバのドキュメントルート)

XAMPPの場合

c:¥xampp¥htdocs¥ZendSkeleton

アプリ実態の配置(Webサーバのドキュメントルート以外)

XAMPPの場合

c:¥xampp¥ZendSkeleton

Zend Framework 2 の配置(Webサーバのライブラリ置き場)

XAMPPの場合

C:¥xampp¥Library

(34)

インストール手順⑤

エントリーポイント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');

(35)

インストール手順⑥

スケルトンプロジェクトの動作確認

URL http://127.0.0.1/ZendSkeleton/

(36)

Zend Framework 2

基本概念

ZEND FRAMEWORK 2 の基本的な概念

を説明します。

(37)

リクエストURLとデフォルト

http://ドメイン/モジュール/コントローラ/アクション

http://127.0.0.1/ZendSkeleton/

(38)

モジュール概念

アプリケーション

モジュール

Model

View

Controller

Action

Action

モジュール

Model

View

Controller

Action

Action

モジュール

Model

View

Controller

Action

Action

(39)

スケルトンプロジェクトで確認

圧縮ファイル内部

¥ ├─config │ └─autoload ├─data │ └─cache ├─module │ └─Application モジュール │ ├─config │ ├─language │ ├─src │ │ └─Application │ │ └─Controller コントローラー │ └─view │ ├─application

(40)

Zend Framework 2

例題による入門

簡単な例題を通して ZEND FRAMEWORK 2

(41)

Zend Framework 2 例題

コントローラーおよびアクションの作成

アクションからビューで値の受け渡し

FORMから値を取得

(42)

例題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

(43)

例題1

コントローラー/アクションの作成

(44)

例題2

値の受け渡し

ビューを配置

C:¥xampp¥ZendSkeleton¥module¥Application¥view¥application¥userにosaka.phtmlを

コピー

以下のURLにアクセスして出力結果を確認しましょう。

http://127.0.0.1/ZendSkeleton/application/user/osaka

(45)

例題2

値の受け渡し

(46)

例題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

(47)

例題3

FORMから値を取得

(48)

例題コースコード

簡単な例題を通してZEND FRAMEWORK 2

(49)

エントリーポイント

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;

(50)

コントローラーの登録

module.config.phpの76行目

◦'controllers' => array( ◦ 'invokables' => array( ◦ 'Application¥Controller¥Index' => 'Application¥Controller¥IndexController', ◦ 'Application¥Controller¥User' => 'Application¥Controller¥UserController', ◦ ), ◦ ),

(51)

コントローラーとアクション

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;

(52)

コントローラーとアクション

◦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); ◦ }

(53)

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">

(54)

ビューファイル

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>

(55)

参考資料

書籍

Zend Framework 2徹底解説

著者:濱田優

定価:3,600円(税別)

ISBN978-4-7980-4011-0

(56)

Captcha機能による認証

簡単なコードで、CAPTCHA機能を実現で

きます。

(57)
(58)
(59)
(60)

コントローラー 先頭部分抜粋

<?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 {

(61)

//画像の保存先 $captcha->setImgDir( 'c:/xampp/htdocs' ); //画像へのURL $captcha->setImgUrl('/'); //キャプチャの作成とID取得 $id = $captcha->generate(); 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);

アクション①

(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;

(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>

(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>

(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="?">

(66)

例題ファイルの内容 ZF2code.zip

>tree /F

C:.

│ form.html

│ index.php

├─config

│ module.config.php

├─src

│ └─Applica on

│ └─Controller

│ CaptchaController.php

│ IndexController.php

│ UserController.php

└─view

└─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

*オリジナルから変更なし

参照

関連したドキュメント

提供事業者 道路・インフラ 事業者等 ・・・.. MaaSサービス提供事業者 MaaS関連データを活用した

クチャになった.各NFは複数のNF  ServiceのAPI を提供しNFの処理を行う.UDM(Unified  Data  Management) *11 を例にとれば,UDMがNF  Service

(※)Microsoft Edge については、2020 年 1 月 15 日以降に Microsoft 社が提供しているメジャーバージョンが 79 以降の Microsoft Edge を対象としています。2020 年 1

サーバー費用は、Amazon Web Services, Inc.が提供しているAmazon Web Servicesのサーバー利用料とな

「美を科学する」巡回展 日本財団助成事業 提供:

保険金 GMOペイメントゲートウェイが提 供する決済サービスを導入する加盟

(ECシステム提供会社等) 同上 有り PSPが、加盟店のカード情報を 含む決済情報を処理し、アクワ

討することに意義があると思われる︒ 具体的措置を考えておく必要があると思う︒