amfphp传值 对象

一直在从事j2EE的开发,看着身边的人都在RIA的开发与应用上有了一点小成绩,没办法现在也开始flex的研究了! 
      我在写一个小程序时,发现flex通过amfphp传递VO对象到php并插入到mysql数据库时,插入成功却没有数据,只有自增长列ID,于是调试发现,VO对象在从flex到amfphp时数据没有丢失,但是到了php的后,用php对应的VO对象来接收并通过构造sql语句直接插入时,数据就为空,分析发现原来自己没有对传递过来的对象进行转换!转换后就成功了!这个是需要flex 与php开发初学者需要注意的! 
     

     主要原因是:php5对flex客户端的传递过来的自定义类型VO对象没有自动转换成服务器的自定义类型VO对象,需要手动实现它

1.在flex客户端建一个Message的AS3类。

该类有三个属性。

[RemoteClass(alias="")]元标签用来注册该类,服务器就可以根据注册名来查找对应的服务器类tutorials.Message。该元标签必须要有,但是别名alias可以任意,不过建议写成完整的限定名。

Flex代码 复制代码 收藏代码
  1. package com.model.vo   
  2. {   
  3.                    
  4.     [RemoteClass(alias="tutorials.Message")]   
  5.     [Bindable]     
  6.     public class Message   
  7.     {   
  8.         public var messageID:int;   
  9.         public var messageTitle:String;   
  10.         public var messageContent:String;   
  11.     }   
  12. }  
package com.model.vo
{
                
	[RemoteClass(alias="tutorials.Message")]
	[Bindable]	
	public class Message
	{
		public var messageID:int;
		public var messageTitle:String;
		public var messageContent:String;
	}
}

  

2.php服务器端对应名为Message的PHP类。

该类也有三个属性与 flex端的Message类对应。

该类中有个属性$_explicitType用来和客户端的类对应起来。

如果你使用的版本是PHP5,那么这个属性其实是多余的。


  

Php代码 复制代码 收藏代码
  1. class Message {   
  2.   
  3.     public $messageID;   
  4.     public $messageTitle;   
  5.     public $messageContent;   
  6.        
  7.   
  8.                  //如果是php5不需要      
  9.     //public $_explicitType = "com.model.vo.Message";    
  10.        
  11.     function currentVO($robject){   
  12.         $keys=array_keys($robject);   
  13.         foreach($keys as $me){   
  14.             $this->$me=$robject[$me];   
  15.         }   
  16.     }   
  17. }  
class Message {

	public $messageID;
	public $messageTitle;
	public $messageContent;
	

                 //如果是php5不需要	
	//public $_explicitType = "com.model.vo.Message"; 
	
	function currentVO($robject){
		$keys=array_keys($robject);
		foreach($keys as $me){
			$this->$me=$robject[$me];
		}
	}
}
3.在AMFPHP的services/tutorials目录下建立一个服务类MessageService 。

该类有一个方法addMessage,用来接受客户端的VO对象,并且返回一个布尔值。遗憾的是,客户端的自定义类型没有自动转换成服务器的自定义类型,我们需要手动实现它,PHP的VO对象类Message有个currentVO方法就是为了达到这个目的。$dbsql是一个数据库操作对象,有一个addMessage() 的方法,用来接受sql语句并插入对象数据。

Php代码 复制代码 收藏代码
  1. require_once 'Message.php';   
  2. require_once 'conn.inc.php';   
  3. class MessageService {   
  4.   
  5.     public function addMessage($message){   
  6.         $mes=new Message();   
  7.         $mes->currentVO($message);//没做什么判断直接写了,哈哈,省点力!   
  8.             $sql="insert into message (messageTitle,messageContent) values('".$mes->messageTitle."','".$mes->messageContent.")";   
  9.             $dbsql=new DBSql();   
  10.             $result=$dbsql->addMessage($sql);   
  11.             if($result>0)   
  12.                 return true;   
  13.             else  
  14.                 return false;   
  15.            
  16.     }   
  17.     }  
require_once 'Message.php';
require_once 'conn.inc.php';
class MessageService {

	public function addMessage($message){
		$mes=new Message();
		$mes->currentVO($message);//没做什么判断直接写了,哈哈,省点力!
			$sql="insert into message (messageTitle,messageContent) values('".$mes->messageTitle."','".$mes->messageContent.")";
			$dbsql=new DBSql();
			$result=$dbsql->addMessage($sql);
			if($result>0)
				return true;
			else
				return false;
		
	}
	}

 这样,从flex客户端的VO对象,通过MessageService的addMessage()方法就能插入数据库了

posted @ 2011-03-17 18:03  as爱好者  阅读(844)  评论(1编辑  收藏  举报