This plugin converts data from incoming packets with explicit types to custom classes, and vice versa for the outgoing packets. It 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.
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.
The explicit type marker is defined in Amfphp_Core_Amf_Constants::FIELD_EXPLICIT_TYPE. At time of writing it is ‘_explicitType’.
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.
You should put your typed classes in the Services/Vo folder as that is where the plugin will look for them by default. If you want to use another folder, you could something like the following in your config class:
array(“customClassFolderPaths” => array(AMFPHP_ROOTPATH . “MyVoFolder”));