flexはamfphpを介してVOオブジェクトをphp注意点に渡す


ずっとj 2 EEの开発に従事して、身の回りの人を见ていてすべてRIAの开発と応用の上で少し小さい成绩があって、仕方なく今flexの研究を始めました!私が小さなプログラムを書いたとき、flexがamfphpを介してVOオブジェクトをphpに渡しmysqlデータベースに挿入したとき、挿入に成功したのにデータがなく、自己成長列IDしかなかったことを発見し、デバッグにより、VOオブジェクトはflexからamfphpに移行したときにデータが失われなかったが、phpになった後、phpに対応するVOオブジェクトで受信し、sql文を構築して直接挿入したとき、データは空で、分析はもとは自分が伝達してきた対象に対して変換していないことを発見します!変換して成功しました!これはflexとphp開発初心者が注意しなければならないことです!      
主な理由は、php 5がflexクライアントに渡したカスタムタイプVOオブジェクトがサーバのカスタムタイプVOオブジェクトに自動的に変換されず、手動で実現する必要があるためです.
 
1.flexクライアントにMessageのAS 3クラスを作成します.
このクラスには3つのプロパティがあります.
[RemoteClass(alias=")]メタラベルはこのクラスを登録するために使用され、サーバは登録名に基づいて対応するサーバクラスtutorialsを検索することができる.Message.このメタラベルは必須ですが、別名aliasは任意ですが、完全な限定名に書くことをお勧めします.
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クラスに対応する3つの属性もある.
このクラスには属性$_があります.explicitypeはクライアントのクラスに対応するために使用されます.
もしあなたが使用しているバージョンがPHP 5であれば、この属性は実は余計です.
  
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のサービス/tutorialsディレクトリの下にサービスクラスMessageServiceを作成します.
このクラスには、クライアントのVOオブジェクトを受け入れ、ブール値を返す方法addMessageがあります.残念なことに、クライアントのカスタムタイプはサーバのカスタムタイプに自動的に変換されていません.手動で実現する必要があります.PHPのVOオブジェクトクラスMessageにはcurrentVOメソッドがあります.$dbsqlはデータベース操作オブジェクトであり、sql文を受け入れてオブジェクトデータを挿入するaddMessage()メソッドがあります.
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()メソッドでデータベースを挿入できます!