Upload
klipstein
View
1.558
Download
4
Embed Size (px)
DESCRIPTION
Vortrag beim Devdusk München am 19.03.2009.
Citation preview
DevDusk München,19.03.2009
Zend Framework und Dojo
Martin Ruprecht, Mayflower GmbHTobias von Klipstein, Uxebu
DevDusk München,19.03.2009
Übersicht
Einleitung Was umfasst die Integration von Dojo in das
ZF? Wie ist der Aufbau eines Projektes mit den
ZF- Komponenten und Dojo Beispiel Diskussion
DevDusk München,19.03.2009
Einleitung
Zend Framework 1.7.6 Dojo 1.2.3
DevDusk München,19.03.2009
Integration
Dojo ist Teil des Zend Frameworks CDN (AOL, Google) externals/dojo eigene Builds
View- Helper dojo() Dijits Zend_Dojo_Data & dojo.data JSON RPC mit Zend_Json_Server
DevDusk München,19.03.2009
Projektaufbau
MVC- Architektur Zend_Layout- Komponente
DevDusk München,19.03.2009
View- Helper dojo()
Platziert im Head- Bereich des Templates Setzt das Dojo- Environment
$this->dojo->enable();
CDN oder lokales Dojo? Stylesheet- Infos parseOnLoad- Verhalten
DevDusk München,19.03.2009
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>ZF und Dojo</title><style type="text/css"><!-- @import "http://o.aolcdn.com/dojo/1.2.0/dijit/themes/tundra/tundra.css";--></style><script type="text/javascript">//<!-- var djConfig = {"parseOnLoad":true};//--></script><script type="text/javascript" src="http://o.aolcdn.com/dojo/1.2.0/dojo/dojo.xd.js"></script>
<script type="text/javascript">//<!--dojo.require("dijit.form.ValidationTextBox"); dojo.require("dijit.form.Form");//-->
</script></head><body class="tundra">
<h2>Devdusk</h2>
<form dojoType="dijit.form.Form"><dl class="zend_form_dojo"><dt><label for="name" class="required">Name:</label></dt><dd><input id="name" name="name" value="" type="text" invalidMessage="Dies ist ein Pflichtfeld!" required="1" dojoType="dijit.form.ValidationTextBox"></dd></dl></form></body></html>
DevDusk München,19.03.2009
Zend_Dojo_Form
Zuweisung im Controller: Zend_Form vs. Zend_Dojo_Form
DevDusk München,19.03.2009
Dijit View Helpers
Dijits im Template<button name="btn" id="btn" type="button" value="speichern" iconClass="myButtons" onClick="submitForm()" dojoType="dijit.form.Button">speichern</button>
<button id="btn" dojoType="dijit.form.Button" onclick="submitForm()">speichern</button>
DevDusk München,19.03.2009
Zend_Dojo_Data
dojo.data: Zugriff auf Datastores JSON XML CSV
http://docs.dojocampus.org/dojox/data/
DevDusk München,19.03.2009
JSON- RPC
„JSON- RPC is a lightweight remote procedure call protocoll. It´s designed to be simple“
Zend_Json_Server
DevDusk München,19.03.2009
Service Mapping Description (SMD)
Beschreibt den Service im JSON- Format Dojo: Simple Method Description{"SMDVersion":".1",
"serviceType":"JSON-RPC",
"methods":[{"name":"listBreweries",
"serviceURL":"/rpc/service/class/Devdusk_Beer",
"parameters":[{"name":"args","type":"object"}]
}]
}
DevDusk München,19.03.2009
JSON- RPC Request{"method": "add", "params": [{1, 1}], "id": 1}
Aufruf eines Remote- Services (Request) Request: Ein einfaches (JSON) serialisiertes
Objekt. Eigenschaften:
method: Name der Methode die aufgerufen werden soll
params: Übergabeparameter in einem Array
id: Request id
Zend_Json_Server
DevDusk München,19.03.2009
JSON- RPC Response{"result": 2, "error": null, "id": 1}
Antwort nach kompletter Anfrage Response: Ein einfaches (JSON)
serialisiertess Objekt. Eigenschaften:
result: NULL im Fehlerfall error: NULL im Erfolgsfall id: muss gleich der Request id sein
DevDusk München,19.03.2009
Zend_Json_Server
JSON- RPC Server- Implementierung PHP- Implementierung der SMD Beispiel
DevDusk München,19.03.2009
Zend_Json_Server
public function smdAction() { $class = $this->_getParam('class'); $server = new Zend_Json_Server(); $server->setClass($class);
// receive SMD $smd = $server->getServiceMap();
// force the server to deliver a dojo compatible format $smd->setDojoCompatible(true); $smd->setTransport('POST');
// this is for the client calls $smd->setTarget($this->getHelper('url')->url(array('controller'=>'rpc', 'action'=>'service'))) ->setId($this->getHelper('url')->url(array('controller'=>'rpc', 'action'=>'service')));
// assigning the smd to the view $this->view->data = $smd;
// set the right return format $this->getResponse()->setHeader('Content-Type', 'application/json');
// render the template service.phtml $this->render('service'); }
DevDusk München,19.03.2009
dojo.rpc.JsonService
Instanziierung: devdusk.rpc.beer = new dojo.rpc.JsonService('/rpc/smd/class/Devdusk_Beer');
Aufruf der Remote- Methode: devdusk.rpc.beer.listBreweries(1).addCallback(function(res){});
DevDusk München,19.03.2009
Vielen Dank für die Aufmerksamkeit