Zend Framework 2 RESTful действия контроллера - PullRequest
4 голосов
/ 07 марта 2012

После многочисленных попыток я не могу заставить мои функции отдыха работать в моем тестовом приложении.

Я задался вопросом, есть ли у кого-нибудь опыт работы с классом RestfulController в Zend FrameWork 2.0.0beta3.

Я реализовал методы из абстрактного класса RestfulController, пусть метод getList () выводит «Foo», сделал запрос curl, чтобы получить какой-то вывод, но все, что я продолжаю получать, это пустой экран.

Я знаю, что есть вариантыдля Zend Framework 1.x, но для моего проекта я должен использовать 2.x.

Если бы один из вас мог предложить мне некоторую помощь, которая была бы очень признательна!

Ответы [ 3 ]

5 голосов
/ 14 апреля 2012

Я работаю над тем же типом приложений, и пока он работает довольно хорошо

Маршрутизация:

'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 ...
    }
}

также не забудьте зарегистрировать свой модуль в конфигурации приложения

3 голосов
/ 19 мая 2012

Посмотрите на эти модули ZF2:

В частности, могут помочь файлы Module.php и config / module.config.php.

3 голосов
/ 19 марта 2012

Я не могу сказать, как вы реализовали это с текущей информацией, но Restful должен прекрасно работать с ZF2. У меня это работало в бета2.

  • Убедитесь, что ваш контроллер расширяет RestfulController и ваши маршруты правильно выбирают параметры контроллера и id, т.е. '/ [: Контроллер [/ [: идентификатор]]]'. Используйте 'Zend \ Mvc \ Router \ Http \ Segment' в качестве типа маршрута.
  • Использование curl с методом HTTP GET без идентификатора должно вызывать метод getList (). Если указан идентификатор, он будет вызывать get ($ id).
  • Вместо эха попробуйте вернуть массив.

Вы также можете взглянуть на ZF2 Restful Module Skeleton на GitHub для вдохновения.

...