Download pdf - PHP と Sencha Ext.Direct

Transcript
Page 1: PHP と Sencha Ext.Direct

PHPとSencha Ext.DirectHisashi Nakamura

Page 2: PHP と Sencha Ext.Direct

自己紹介• 中村久司

• Sencha UG Co-Organizer

• 株式会社ゼノフィ関西事業所 事業所長

• Sencha オフィシャルトレーナー

• 著書

• Sencha Touch 2 実践開発ガイド

@martini3oz

Page 3: PHP と Sencha Ext.Direct

• Single Page Application への流れとAPI

• Sencha について

• Ext.Direct って何?

• Ext.Directの実際

• まとめ PHPとSencha Ext.Direct

Page 4: PHP と Sencha Ext.Direct

• Single Page Application への流れとAPI

• Sencha について

• Ext.Direct って何?

• Ext.Directの実際

• まとめ PHPとSencha Ext.Direct

Page 5: PHP と Sencha Ext.Direct

Single Page App• シングルページアプリケーション

• ページ遷移をなくして、HTML5 / JavaScript の仕組みを

使ってクライアント側で画面を書き換え

• クライアントリッチな方向へ

• かわりにサーバーサイドは Thin になる

Page 6: PHP と Sencha Ext.Direct

サーバーAPI

• HTML5 / JavaScript によるフロントの実装

• SPA (Single Page Application) の台頭

• PHP の主な役割はAPIでのJSONデータの提供に

Page 7: PHP と Sencha Ext.Direct

APIの呼び出し 1 $.ajax({! 2 url: './hoge.php',! 3 type: 'POST',! 4 dataType: 'json',! 5 ! 6 data: {! 7 id: 10! 8 },! 9 !10 success: function(data) {!11 // some process!12 },!13 !14 error: function(xhr, status, err) {!15 // error!16 }!17 });!

Page 8: PHP と Sencha Ext.Direct

JSONを返す 1 <?php! 2 $id = isset($_POST['id']) ? $_POST['id']: null;! 3 $result = getPersonData($id);! 4 echo json_encode($result);! 5 ! 6 function getPersonData($id) {! 7 //! 8 }!

Page 9: PHP と Sencha Ext.Direct

• 一つひとつ作ると煩わしいAPIとその呼び出し

• Sencha の Ext.Direct を使うとすっきりとします

Page 10: PHP と Sencha Ext.Direct

• Single Page Application への流れとAPI

• Sencha について

• Ext.Direct って何?

• Ext.Directの実際

• まとめ PHPとSencha Ext.Direct

Page 11: PHP と Sencha Ext.Direct

ところで

Page 12: PHP と Sencha Ext.Direct

ところで

Sencha って何よ?

Page 13: PHP と Sencha Ext.Direct

• カリフォルニア州レッドウッドシティにある企業

• HTML5について先駆者として取り組み

• フレームワーク/ツール/サービスを提供

Sencha 社

Page 14: PHP と Sencha Ext.Direct

Sencha 製品

Sencha Ext JS Sencha Touch Sencha GXT

Sencha Architect Sencha Cmd

Sencha Animator

Support Training

Sencha Space

フレームワーク層 ツール層 サービス層

Page 15: PHP と Sencha Ext.Direct

Sencha 製品

Sencha Ext JS Sencha Touch Sencha GXT

Sencha Architect Sencha Cmd

Sencha Animator

Support Training

Sencha Space

フレームワーク層 ツール層 サービス層Sencha Space については 来週土曜日の JAWS三都物語

でお話しします。

Page 16: PHP と Sencha Ext.Direct

Sencha Ext JS 5

• 豊富なUIコンポーネント

• 堅牢なクラスシステム

• クロスブラウザ対応

• プラグイン不要のチャート

• MVC / MVVM アーキテクチャ

全てのブラウザでリッチなアプリを作成するためのHTML5 / JavaScript フレームワーク

Page 17: PHP と Sencha Ext.Direct

• Single Page Application への流れとAPI

• Sencha について

• Ext.Direct って何?

• Ext.Directの実際

• まとめ PHPとSencha Ext.Direct

Page 18: PHP と Sencha Ext.Direct

Ext.Direct

Ext Directは、クライアントサイドからリモートサー バサイドメソッドを呼び出す、プラットフォームや言語にとわられない技術です。Ext Directは、クライア ントサイドのExt JSアプリケーションと、ポピュラーなサーバプラットフォームの間でシームレスな通信を可能にします。

Page 19: PHP と Sencha Ext.Direct

Ext.Direct

• Ext JS / Sencha Touch にひっそりと装備されている

• RPC (Remote Procedure Call) を実現

• サーバーサイドのメソッドをクライアントのJavaScriptから

直接実行するしくみ

Page 20: PHP と Sencha Ext.Direct

サーバー側ですること

• API 情報を公開

• どんなクラスとメソッドが用意されているか

• アクセスポイント (Router) はどこか

• Router を設置

Page 21: PHP と Sencha Ext.Direct

API• Ext Direct でコールできるサーバー側メソッドをクライアン

トに教える。

• ここではAPI情報が入った JavaScript コードを返す。

• クライアント側では、この情報を RemotingProvider に渡

す。

Page 22: PHP と Sencha Ext.Direct

Router

• クライアントがメソッドをコールした時にリクエストを受け

付ける

• リクエストの中を解析してサーバーサイドのメソッドをコー

ルする

Page 23: PHP と Sencha Ext.Direct

クライアント側• Direct Manager に API 情報を渡して RemotingProvider

を追加

• RemotingProvider は JavaScript の関数オブジェクトを

生成する

• 生成された関数をコールするとサーバーにリクエストが

Page 24: PHP と Sencha Ext.Direct

• Single Page Application への流れとAPI

• Sencha について

• Ext.Direct って何?

• Ext.Directの実際

PHPとSencha Ext.Direct

Page 25: PHP と Sencha Ext.Direct

サーバー側を用意する• example に PHPでのサーバーサイドコードが用意されてい

• classes ディレクトリの下に公開メソッドを用意したクラス

を配置

• 公開するメソッドのシーケンスを config.php に指定

Page 26: PHP と Sencha Ext.Direct

見てみましょう

Page 27: PHP と Sencha Ext.Direct

呼び出す

• Ext.Direct を用意する

• Ext.direct.Manager の addProvider メソッドで API を追

• 呼び出す

Page 28: PHP と Sencha Ext.Direct

呼び出す

• 中身は Ajax リクエストなので、値を返すメソッドの場合は

非同期でコールバックで受け取る

30 onGetData: function(form, field, value) {!31 Direct.rpc.Customer.getCustomer(value, function(ret) {!32 form.getForm().setValues(ret);!33 });!34 },

Page 29: PHP と Sencha Ext.Direct

見てみましょう

Page 30: PHP と Sencha Ext.Direct

こんなことされたら36 onGetMultiData: function() {!37 var me = this, i,!38 store = me.getCustomersStore();!39 !40 store.removeAll();!41 for(i=1; i<=100; i++) {!42 Direct.rpc.Customer.getCustomer(i, function(ret) {!43 store.add(ret);!44 });!45 }!46 }!

ループの中でDirectを呼んでる

Page 31: PHP と Sencha Ext.Direct

こんなことされたら

• 100回のRPCをループの中で呼び出している

• 100回のAjaxリクエストがサーバーへ?

• んなことされたら困るわ (;´д`)

Page 32: PHP と Sencha Ext.Direct

こんなことされたら

• でも大丈夫なんです。Direct では。

• 連続して実行されたRPC呼び出しは、Ext.Direct がバイン

ドして処理してくれるのです

Page 33: PHP と Sencha Ext.Direct

リクエストのバインド• 短時間の間に呼び出された関数コールはまとめられて一つの

リクエストとして送信される

• サーバー側の Router は、それらを分解してサーバーのメ

ソッドをコールする

• すべてのリザルトをまとめてクライアントに返す

• RemotingProviderが順次コールバックを呼び出す

Page 34: PHP と Sencha Ext.Direct

見てみましょう

Page 35: PHP と Sencha Ext.Direct

• Single Page Application への流れとAPI

• Sencha について

• Ext.Direct って何?

• Ext.Directの実際

• まとめ PHPとSencha Ext.Direct

Page 36: PHP と Sencha Ext.Direct

• Single Page Application への潮流

• 複雑になりがちなAPIをひとつにまとめる

• 無駄なリクエストをバインドして高性能に

• Ext JS のデータモデルとの連携も可能

PHPとSencha Ext.Direct

Page 37: PHP と Sencha Ext.Direct

• PHP との相性は抜群

• サーバー側実装もたくさんのものがある

• これを機会に是非、Sencha Ext JS を触って見てください

• モバイルには Sencha Touch もあります

PHPとSencha Ext.Direct

Page 38: PHP と Sencha Ext.Direct

告知

• 2014/07/12 13:00より

• 日本マイクロソフト関西支店

• http://atnd.org/events/51279

初心者向けJavaScript入門からテラ・コーディングまで! JavaScriptフレームワークの主流、MVVMアーキテクチャパターンを採用しているKnockoutJSを堪能する!Sencha Ext JSのMVVMもやります!

Page 39: PHP と Sencha Ext.Direct

ご清聴ありがとう

ございました