Другой сервис для моего приложения Flex с использованием Zend_Amf

У меня есть служба итератора, которая уже отлично работает и возвращает правильно структурированные значения в мое гибкое приложение через мой сервер Zend Amf.

    $contacts = array();

    mysql_connect( 'localhost', 'root', 'test' );
    mysql_select_db( 'test' );

    $res = mysql_query( 'SELECT * FROM contact' );
    while( $contact = mysql_fetch_assoc($res) ) {
          $contacts []= $contact;
    }

   return $contacts;

Однако я хотел бы настроить это так, чтобы я мог использовать свою структуру MVC и достигать тех же результатов. Я разместил выдержку, которую можно довести до рабочего состояния

 $contacts = array();

 $table = new Model_DbTable_Contact();
 $result = $table->fetchAll();

 //Return an array to be consumed by my flex application     
 foreach ($result as $row)
  {
    /*do something*/
  }

  return $contacts; 

person davykiash    schedule 04.02.2010    source источник


Ответы (2)


Вы захотите изучить ValueObjects. Zend_Amf их поддерживает, и это хорошая идея. Таким образом, вы можете иметь объекты, которые являются родными как для PHP, так и для Flex.

$server->setClassMap('ContactVO', 'Contact');

Тогда ваш Flex будет иметь класс:

[Bindable]
[RemoteClass(alias="Contact")]
public class ContactVO
{
}

Сообщит вашему серверу, что вы собираетесь сопоставить свой класс Contact с ContactVO в Flex.

тогда вы можете сделать:

$data = array();
foreach ($result as $row)
{
    $data[] = new Contact($row); 
    //assuming the Contact constructor parses the array data
}
return $data;

и ваши объекты Contact попадут во Flex как объекты ContactVO

person naneau    schedule 04.02.2010
comment
Я использую $server-›addDirectory(APPLICATION_PATH . '/services/'); вместо этого $server-›setClassMap('ContactVO', 'Contact'); не будет необходимо - person davykiash; 04.02.2010

Итак, здесь у меня есть функция в логической модели для таблицы базы данных:

общедоступная функция fetchAll () {

    $resultSet = $this->getDbTable()->fetchAll();
    $entries = array();
    foreach( $resultSet as $row ) {
        $entry = new Model_ClosingData();

        $entry->setId($row->id)
              ->setContractMonth($row->monthId)
              ->setCommodity($row->commodityId)
              ->setDate($row->date)
              ->setPrice($row->price)
              ->setVolume($row->volume)
              ->setOutstandingInterest($row->outstandingInterest);
        $entries[] = $entry;
    }
    return $entries;
}
person Community    schedule 04.02.2010