Integrating Flex & PHP - An Introductory Tutorial

The functions called after each service request have the same role: to assign to an element on the page—department_id, the ComboBox, and employees, the DataGrid—the data returned by the PHP script. Here’s what those functions look like (this is ActionScript code):
private function handleDepartmentsXml(e:ResultEvent):void {
department_id.dataProvider = e.result.departments.department;
}
private function handleEmployeesXml(e:ResultEvent):void {
employees.dataProvider = e.result.employees.employee;
}


Each function receives a ResultEvent object as its lone argument. The HTTP response is available through that object’s result property. Within the function, the specific element’s dataProvider property is assigned the received XML data, which is to say the ComboBox and the DataGrid are populated from that XML. But in each case, the specific subelement must be named (the individual department elements are to be used, not the root departments, and employee, not employees).

Those functions are called after the service request is completed. To actually invoke that request, the send() method must be called, which happens in an init() function:

private function init():void {
getDepartmentsService.send();
getEmployeesService.send();
}


You’ve already seen this concept: clicking the Add button invokes the postAddEmployeeService.send() method. Let’s look at how that service is defined, as it’s a bit different:

<mx:HTTPService id="postAddEmployeeService"
url="http://localhost:8888/flex/add_employee.php"
method="POST"
resultFormat="text"
result="handleEmployeeAdd(event)">
<mx:request xmlns="">
<first_name>{first_name.text}</first_name>
<last_name>{last_name.text}</last_name>
<department_id>{department_id.selectedItem.id}</department_id>
</mx:request>
</mx:HTTPService>


Again, a unique id is assigned and the appropriate URL is named. The method, which is GET by default, is here set as POST, and the resultFormat is plain text, which is what the associated PHP script returns. When the request is completed, the handleEmployeeAdd() function is to be called. As this request must also send data to the PHP script, an extra request element is added. Within it, an element is added for each piece of data. The name of the element will correspond to the $_POST array index in the PHP script (the id values in the form do not dictate the contents of $_POST). For each element value, refer to the page item’s id, then the text property for the TextInputs, and selectedItem.id for the ComboBox. For this last value, selectedItem identifies the user’s selection. This is followed by id, which is used because the values for the ComboBox will be the id elements from the XML data.

Finally, here’s what the handleEmployeeAdd() function looks like, which is called after this service request is made:

private function handleEmployeeAdd(e:ResultEvent):void {
Alert.show(String(e.result));
getEmployeesService.send();
}


This function does two things. First, it uses an alert window (similar to, but nicer than a JavaScript alert) to display the PHP script’s response. Two earlier figures show this in action. The function also resends the getEmployeesService request, in order to update the contents of the DataGrid, thereby reflecting the added employee.

Going Forward
If you put the database, the PHP scripts, and the Flex all together, you should end up with a perfectly functioning and nice Rich Internet Application. As with any technological thing you do, there’s lots of ways you can expand this example or other directions you can go. One option would be to add validators to the Flex code to pre-validate the form data (you should still keep the server-side validations, of course). And one of the great side benefits to using Flex is that you can easily turn out both a Web-based application (i.e., Flash to be run in browser) or a desktop application (thanks to Adobe AIR).

AttachmentSize
leu_flex_php_1.1.png69.58 KB
leu_flex_php_1.2.png10.2 KB
leu_flex_php_1.3.png14.37 KB
leu_flex_php_1.4.png13.05 KB
leu_flex_php_1.5.png9.63 KB
leu_flex_php_1.6.png7.71 KB
larry_ullman_flex_php1_code.zip382.27 KB
0
Average: 5 (1 vote)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

dazweeja replied on Thu, 2009/05/28 - 6:34pm

Although I realise this is an introductory tutorial, I think using XML is more error-prone and probably has the same level of difficulty as using AMFPHP or ZendAMF. Using AMF means lower bandwidth and removing the extra step of echoing out lines of XML. Much easier and safer to send an array of typed objects which means your client and server-side code can be much more closely aligned.

LarryUllman replied on Sun, 2009/05/31 - 9:10pm in response to: dazweeja

Thanks for your feedback. I agree that using AMF often makes sense. But as you point out, this is an introductory tutorial, so I wanted to limit the number of foreign concepts discussed. Plus, XML, which can be a pain to debug, is often a logical chioce, too. Moreover, XML is often a required format, like when working with third-party data feeds. But for those going further with their PHP-Flex development, looking into AMF is a logical step. Thanks again!

dengiz replied on Sun, 2009/06/07 - 7:34pm

thanks a lot for this great tutorial. That is exactly what I was searching for!

Just one question: departments_xml.php didn't function properly. I couldn't find why.

LarryUllman replied on Mon, 2009/06/15 - 1:32pm

You're quite welcome. Glad it was helpful and thanks for the nice words. As for the XML file, what happens if you run it directly in your browser? Does it return proper XML or an error? And do make sure you run it through a URL.

kalchuka replied on Sat, 2009/06/20 - 6:42am

thnks for this tutorial. please can you help explain to me how to make use of amfphp with flex. i ve read a lot of article but seem not to grab the thing. i already know how to do php

LarryUllman replied on Mon, 2009/06/22 - 10:12am

Thanks for the feedback. I'll try to put together something on amfphp+Flex and will post a URL once I've done so. It'll be a while, though, as I'm in the middle of some other projects right now.

danieldourado_2 replied on Tue, 2009/07/14 - 5:02pm

I really would like to thank you for this tutorial, Ive been searching for 2 days in order to find a tutorial with examples which i could understand, yours is the best ive found, thank you!

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.