Zend Framework und das Dojo Toolkit

Post on 22-Nov-2014

1.558 views 4 download

description

Vortrag beim Devdusk München am 19.03.2009.

Transcript of Zend Framework und das Dojo Toolkit

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