Zend без базы данных - PullRequest
3 голосов
/ 13 мая 2010

Я гуглил в течение часа, но, возможно, мой Google-Fu слишком слабый, я не смог найти решение.

Я хочу создать приложение, которое запрашивает службу через запросы JSON (все данные и бэкэнд / бизнес-логика хранятся в службе). С простым PHP это достаточно просто, так как я просто делаю запрос curl, json_decode результат и получаю то, что мне нужно. Это уже работает довольно хорошо.

Запрос может выглядеть следующим образом:

Звоните http://service-host/userlist с телом:

{"logintoken": "123456-1234-5678-901234"}

Получите результат:

{
  "status": "Ok",
  "userlist":[
     {"name": "foo", "id": 1},
     {"name": "bar", "id": 2}
  ]
}

Теперь мы хотим включить это в Zend Framework, поскольку это хобби-проект, и мы хотим узнать о Zend. Проблема в том, что вся информация, которую я смог найти, использует базу данных.

Есть ли способ создать Zend-проект, который не использует базу данных? И как я могу написать модель, которая представляет действия вместо объектов и объектных отношений?

Ответы [ 2 ]

5 голосов
/ 13 мая 2010

Взгляните на Zend_Json и Zend_Http (или просто используйте обычный cURL).

Что касается вашей модели, то не должно быть разницы, является ли источник данных базой данных или веб-службой. Просто есть один класс, который знает, как запросить источник данных. Неважно, является ли реализация чего-то вроде getUserById запросов к базе данных или веб-сервису, например

class UserGateway
{
    protected $_dataSource;
    public function __construct($dataSource)
    {
        $this->_dataSource = $dataSource;
    }
    public function getUserById($id)
    {
        // interact with datasource instance to retrieve a user by ID
    }
}

и затем для $dataSource что-то вроде

class UserDb extends Zend_Db_Table {}

или что-то вроде

class UserWebService extends Zend_Http_Client {}

Другими словами, просто создайте соответствующие классы, которые вы можете передать UserGateway, например,

$users = new UserGateway(new UserWebService);
$users->findById(123);

И то, как именно вы находите пользователя, является подробностью реализации в шлюзе и / или классе источника данных.

Вас также могут заинтересовать Zend_Rest_Client и

1 голос
/ 13 мая 2010

Поскольку Zend Framework использует архитектуру MVC (Model-View-Controller), слои легко взаимозаменяемы. Просто напишите несколько классов, которые абстрагируют вас от источников данных, и используйте их в качестве модели.

Например, мне нравится использовать Doctrine в качестве уровня модели в моих проектах вместо классов интерфейса таблицы, которые поставляются с ZF. Doctrine также делает абстракцию базы данных, но вы можете заменить ее чем угодно. Это не обязательно должна быть база данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...