Converts data from incoming packets with explicit types to custom classes, and vice versa for the outgoing packets.

This plugin can be deactivated if the project doesn't use custom classes.

The AMF deserializer reads a typed AMF object as a stdObj class, and sets the AMF type to a reserved "explicit type" field. This plugin will look at deserialized data and try to convert any such objects to a real custom class.

It works in the opposite way on the way out: The AMF serializer needs a stdObj class with the explicit type marker set to write a typed AMF object. This plugin will convert any typed PHP objects to a stdObj with the explicit type marker set.

The explicit type marker is defined in Amfphp_Core_Amf_Constants

If after deserialization the custom class is not found, the object is unmodified and the explicit type marker is left set. If the explicit type marker is already set in an outgoing object, the value is left as is.

This works for nested objects.

If you don't need strong typing in PHP but would like the objects in your client to be strongly typed, you can: For example a stdObj like this will be returned in AMF as MyVO

$returnObj = new stdObj();
$explicitTypeField = Amfphp_Core_Amf_Constants::FIELD_EXPLICIT_TYPE;
$returnObj->$explicitTypeField = "MyVO";

If you are using Flash, remember that you need to register the class alias so that Flash converts the MyVO AMF object to a Flash MyVO object. If you are using Flex you can do this with the RemoteClass metadata tag.

see \global\Amfphp_Core_Amf_Constants::FIELD_EXPLICIT_TYPE
link http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/package.html#registerClassAlias%28%29
link http://livedocs.adobe.com/flex/3/html/metadata_3.html#198729
package Amfphp_Plugins_CustomClassConverter
author Ariel Sommeria-Klein

 Methods

constructor.

__construct(array $config) 

Parameters

$config

array

optional key/value pairs in an associative array. Used to override default configuration values.

if the object contains an explicit type marker, this method attempts to convert it to its typed counterpart if the typed class is already available, then simply creates a new instance of it.

convertToTyped(mixed $obj) : mixed

If not, attempts to load the file from the available service folders. If then the class is still not available, the object is not converted note: This is not a recursive function. Rather the recusrion is handled by Amfphp_Core_Amf_Util::applyFunctionToContainedObjects. must be public so that Amfphp_Core_Amf_Util::applyFunctionToContainedObjects can call it

Parameters

$obj

mixed

Returns

mixed

converts untyped objects to their typed counterparts.

filterDeserializedRequest(mixed $deserializedRequest) : mixed

Loads the class if necessary

Parameters

$deserializedRequest

mixed

Returns

mixed

looks at the outgoing packet and sets the explicit type field so that the serializer sends it properly

filterDeserializedResponse(mixed $deserializedResponse) : mixed

Parameters

$deserializedResponse

mixed

Returns

mixed

sets the the explicit type marker on the object and its sub-objects.

markExplicitType(mixed $obj) : mixed

This is only done if it not already set, as in some cases the service class might want to do this manually. note: This is not a recursive function. Rather the recusrion is handled by Amfphp_Core_Amf_Util::applyFunctionToContainedObjects. must be public so that Amfphp_Core_Amf_Util::applyFunctionToContainedObjects can call it

Parameters

$obj

mixed

Returns

mixed

 Properties

 

$customClassFolderPaths : array