4

经过多次尝试,我无法让我的休息功能在我的测试应用程序中工作。

我想知道是否有人对 Zend FrameWork 2.0.0beta3 中的 RestfulController 类有经验。

我实现了来自 RestfulController 抽象类的方法,让 getList() 方法回显“Foo”,做了一个 curl 请求以获取一些输出,但我一直得到的只是一个空白屏幕。

我知道 zend 框架 1.x 有一些选项,但对于我的项目,我需要使用 2.x。

如果你们中的任何一个可以为我提供一些帮助,那将不胜感激!

4

3 回答 3

5

我正在开发相同类型的应用程序,到目前为止它运行良好

路由:

'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',
    ...
)

在Controller中,你返回渲染的内容类型取决于你自己的策略,它可以通过不同的方式来实现。

就我而言,它需要能够以各种格式响应,例如:php serialize、、和通过回调处理程序返回它。jsonamfxmlZend\Serializer\Adapter

快速概览:

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

也不要忘记在应用程序配置中注册您的模块

于 2012-04-14T05:39:19.253 回答
3

我不知道您是如何使用当前信息实现它的,但 Restful 应该可以在 ZF2 上正常工作。我让它在 beta2 中工作。

  • 确保你的控制器扩展了 RestfulController 并且你的路由正确地获取了控制器和 id 参数,即。'/[:控制器[/[:id]]]'。使用 'Zend\Mvc\Router\Http\Segment' 作为路由类型。
  • 将 curl 与 HTTP GET 方法一起使用并且没有 id 应该调用 getList() 方法。如果指定了 id,它将改为调用 get($id)。
  • 尝试返回一个数组,而不是回显。

您还可以查看 GitHub 上的ZF2 Restful Module Skeleton以获得灵感。

于 2012-03-19T16:45:38.720 回答
3

考虑看看这些 ZF2 模块:

特别是 Module.php 和 config/module.config.php 文件可能会有所帮助。

于 2012-05-18T23:57:17.827 回答