Я работаю над тем же типом приложений, и пока он работает довольно хорошо
Маршрутизация:
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/[:controller[.:format][/:id]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'format' => '(xml|json|sphp|amf)',
'id' => '[1-9][0-9]*',
),
'defaults' => array(
'controller' => 'Rest\Controller\IndexController',
'format' => 'json',
),
Псевдоним DI:
'alias' => array(
'index' => 'Rest\Controller\IndexController',
...
)
в контроллере, тип контента, который вы возвращаете для рендеринга, зависит от вашей собственной стратегии, это может быть достигнуто различными способами.
В моем случае, он должен иметь возможность отвечать в различных форматах, таких как: php serialize
, json
, amf
и xml
, я использую Zend\Serializer\Adapter
, чтобы сериализовать мой контент и напрямую возвращать экземпляр ответа либо вы возвращаете его непосредственно в действии контроллера, либо централизуете его, перехватывая событие отправки RestfulController, и возвращаете его через обработчик обратного вызова.
Краткий обзор:
namespace Rest\Controller
{
use Zend\Mvc\Controller\RestfulController;
class IndexController extends RestfulController
{
public function getList()
{
$content = array(
1 => array(
'id' => 1,
'title' => 'Title #1',
),
2 => array(
'id' => 2,
'title' => 'Title #2',
),
);
/**
* You may centralized this process through controller's event callback handler
*/
$format = $this->getEvent()->getRouteMatch()->getParam('format');
$response = $this->getResponse();
if($format=='json'){
$contentType = 'application/json';
$adapter = '\Zend\Serializer\Adapter\Json';
}
elseif($format=='sphp'){
$contentType = 'text/plain';
$adapter = '\Zend\Serializer\Adapter\PhpSerialize';
}
// continue for xml, amf etc.
$response->headers()->addHeaderLine('Content-Type',$contentType);
$adapter = new $adapter;
$response->setContent($adapter->serialize($content));
return $response;
}
// other actions continue ...
}
}
также не забудьте зарегистрировать свой модуль в конфигурации приложения