response($data = array(), $http_code = 200)
此方法是用来透过格式化和输出逻辑传送你的回应资料。 你可以选择性的设定一个状态码做为第二参数。
Rest 控制器是 Base 控制器的扩充并内建支援 RESTful。 这能让你轻鬆建立 API。
请注意: 如果你在你的 REST 控制器使用 before() 或 router 方法, 你 必须 呼叫父层方法 parent::before()(或路由)以保持正常运作。
如同所有的控制器,你在 fuel/app/classes/controller 目录里建立一个类别。 它们需要扩充 Controller_Rest 类别并且预设前缀为 "Controller_"。 下面是一个控制器 "test" 的範例:
class Controller_Test extends Controller_Rest
{
public function get_list()
{
return $this->response(array(
'foo' => Input::get('foo'),
'baz' => array(
1, 50, 219
),
'empty' => null
));
}
}
此控制器的 "list" 方法被以下的 URL 呼叫:
http://localhost/test/list.json?foo=bar
你会注意到,Rest 控制器使用 HTTP 方法做为前缀,而不是常见的 "action_"。 当没有发现相对应于 HTTP 方法前缀的方法时,将退回到 "action_" 前缀。 Rest 控制器支援所有常见的 HTTP 方法,比如:
HTTP 方法 | 描述 |
---|---|
GET | 用于取出关于现有资源的资讯。 当你输入一个 URL 并前往浏览,或当你点下一个连结,这会被浏览器使用。 所以它适合取回在你资源(如使用者)的资讯。表单也可以使用此方法来取回送交查询字串的资讯(即搜寻表单)。 |
POST | 用于建立新资源。由于 HTML 支援 PUT 方法的不足,它也被用于更新资源。大多数表单使用 POST 方法,除了当它们打算取回送交查询字串的资讯。 |
PUT | 用于建立或更新有已知 ID 的资源。你被预期传递所有特性。遗漏的应该被设为 NULL。较不常用因为还不被 HTML(5)支援。虽然大多数的浏览器支援 XMLHttpRequests。 |
DELETE | 用于删除现有资源。如同 PUT,不被 HTML(5)支援但大多数浏览器支援 XMLHttpRequests。 |
PATCH | 用于更新有已知 ID 的资源。你只传递你想要更新的特性。较不常用因为还不被 HTML(5)支援。虽然大多数的浏览器支援 XMLHttpRequests。 |
这不是一个限制性的清单,FuelPHP 框架接受任何你网页伺服器接受的 HTTP 方法。
{
"foo":"bar",
"baz":[1,50,219],
"empty":null
}
这输出为 json,因为副档名被定义在 URL。预设情况下, 回应将被格式化为 XML 或其他设定在 fuel/core/config/rest.php 中的格式。
REST 控制器可以透过 fuel/core/config/rest.php 配置档案全域地配置。 它已经填入了一个预设配置。你可以透过添加一个同名的配置档案到你应用程序的 config 目录来覆写此配置, 并在这里设定你想要变更的值。 这些将覆写核心配置,但保留你没有覆写的部份。
以下的全域配置值可以被定义:
参数 | 类型 | 预设 | 描述 |
---|---|---|---|
default_format | 字串 |
| 要回传结果的预设格式。这只用在控制器中没定义格式, 而且所有自动检测机制失效时。 |
xml_basenode | 字串 |
| 要被用在输出 XML 结构时的基本节点 XML 标籤。 |
realm | 字串 |
| 受密码保护的 REST API 显示在登入对话框的名称。 |
auth | 字串 |
| 定义所需的认证类型。有效的值有 'basic' 和 'digest'。 你也可以定义一个必须被呼叫来检查认证的控制方法名称。此方法可能回传一个布林。 (true 将允许请求,false 将回传一个预设的 401 回应),或一个 Response 物件。 留空如果没有认证需要被执行。 |
valid_logins | 字串 |
| 一个键/值配对的阵列,为 'basic' 和 'digest' 授权方法定义有效的使用者名称及密码。 |
ignore_http_accept | 布林 |
| HTTP_ACCEPT 表头是否应该在一个 REST 请求被解析,以确定回传的格式。 |
如果你的控制器方法回传一个阵列,但请求的输出格式是阵列不能被转换的(例如 html), 当你的应用程序运行在一个生产环境时,你会得到一个 406 NOT ACCEPTABLE 状态, 或在任何其他环境时, 是一个警告讯息以及一个阵列倒出的 JSON。
要确定结果应该被回传的格式,REST 控制器使用以下的演算法:
在大多数情况下,HTTP_ACCEPT 会呈现并包含(至少)text/html,这是一个有效的结果格式。 这意味着 $rest_format、以及任何定义在 rest.php 配置档案中的全域预设, 将永远不会被使用。
要停用 HTTP_ACCEPT 做为一个有效的格式来源, 设定在 rest.php 里的 ignore_http_accept 配置键为 true
。
请注意,在你的 REST 控制器硬写任何结果格式被认为是不好的做法。 它应该是由客户端指定应该回传的结果格式。在 HTTP_ACCEPT 的情况下,大多数 ajax 解决方案,例如 jQuery.ajax()
,允许你设定接收表头为 application/json。
当使用 XML 输出你可以透过设定 $xml_basenode
参数来设定 XML 基本节点。
class Controller_Test extends Controller_Rest
{
// 设定给全控制器
protected $xml_basenode = 'my_basenode';
// 或在你的控制器函式内
public function get_items()
{
$this->xml_basenode = 'other_basenode';
return $this->response(array(
'foo' => Input::get('foo'),
'baz' => array(
1, 50, 219
),
'empty' => null
));
}
}
此方法是用来透过格式化和输出逻辑传送你的回应资料。 你可以选择性的设定一个状态码做为第二参数。