spanitz / silex-restful-controller

此包已被废弃且不再维护。没有建议的替代包。

用于实现RESTful API的简单Silex控制器

1.0.0 2014-04-13 10:08 UTC

This package is not auto-updated.

Last update: 2024-07-16 00:44:14 UTC


README

RestfulControllerProvider提供了一种实现基于类的路由控制器的替代方法。

入门

只需为特定路由注册RestfulControllerProvider

<?php

use spanitz\Silex\Provider\RestfulControllerProvider;

$app = new Silex\Application();
$app->mount('/api', new RestfulControllerProvider());

用法

以众所周知的Todo示例为例

<?php
namespace Api\Controller;

use spanitz\Silex\RestfulController;

class Todo extends RestfulController
{
    public function get ($id = null)
    {
        $data = array();
        // fetch multiple todos, or a single one by its $id...

        return $data;
    }

    public function put ($id = null)
    {
        // update todo...
    }

    public function post ()
    {
        // create todo...
    }

    public function delete ($id = null)
    {
        // delete todo...
    }
}

上述实现公开了以下路由

  • GET /api/todo/<id>
  • PUT /api/todo/<id>
  • POST /api/todo/
  • DELETE /api/todo/<id>

如您所见,实现的方法与HTTP方法相对应。如果您的控制器从RestfulController扩展,则您可以在方法中使用$this->app访问Silex应用程序实例,并使用$this->request访问相应的请求。

您的方法可以返回一个数组,它将被作为JsonResponse返回;或者返回任何类型的Symfony\Component\HttpFoundation\Response实例。

配置

如果默认命名空间Api\Controller不符合您的需求,只需在构造函数中覆盖配置即可

$app->mount('/api', new RestfulControllerProvider(array(
   'namespace' => 'My\Controller\Namespace'
)));

您的RestfulController的派生类也负责正确的响应代码。如果您想覆盖此行为,可以设置以下配置

$app->mount('/api', new RestfulControllerProvider(array(
   'status-codes' => array(
       'post' => 200
       'put' => 200
   )
)));

安装

简单通过composer安装。将以下行添加到您的composer.json中

{
    "require": {
        "spanitz/silex-restful-controller": "1.0.*@dev"
    },

    "autoload": {
        "psr-4": {"Api": "src/"}
    }
}