我对PHP和Kohana非常陌生。已经创建了一个示例/演示“hello World”PHP Kohana应用程序,该应用程序在WAMP服务器中成功运行。
我希望我的应用程序可以作为一个完整的服务器端组件工作。
由于我在这个应用程序中只有服务器端逻辑,它应该使用ORM与我的MySQL数据库进行通信。
我将有一个单独的客户端应用程序,它将具有UI部件。
所以我希望我的PHP-Kohana应该从我的客户端识别RestFul webservices调用并相应地给出JSON响应。
是否可以创建支持RestFul webservices的Kohana应用程序?
如果是,请给我一个指导,以便在Kohana应用程序中创建Web服务。
是否有任何此类演示示例代码?
答案 0 :(得分:1)
我不知道具体的演示或示例代码,所以希望这些提示有助于您开始使用它...
接受AJAX请求并使用Kohana生成JSON响应是可能的,也是相对容易的。首先要注意的是,除非另有说明,否则Kohana将始终尝试生成视图,这将作为JSON响应失败,所以首先要做的事情是:
if ($this->request->is_ajax()) {
// Disable any rendering of the template so it just returns json.
$this->auto_render = FALSE;
}
您可能希望将它放在before()方法中,可能是父控制器,以便它始终在从数据库获取数据之前运行。
我个人偏好这样的事情就是建立一个标准的AJAX响应数组,以便始终以相对标准的格式返回数据。例如:
// Standard ajax response array.
$this->ajax_response = array(
'success' => FALSE,
'error' => NULL,
'raw_data' => NULL,
'generated' => ''
);
自定义上述内容以符合您的要求。您可能也希望在before()方法中使用它。
现在,在您的操作方法中,从数据库中获取数据并将其添加到数组中。
public function action_foobar() {
// Get the primary key ID from the URL.
$var1 = $this->request->param('var1');
$data = ORM::factory('Model', $var1);
if ($data->loaded()) {
$this->ajax_response['success'] = TRUE;
$this->ajax_response['raw_data'] = $data;
} else {
$this->ajax_response['error'] = 'Data could not be found.';
}
}
然后,您应该可以通过调用http://www.website.com/controller/foobar/42
最后一块拼图实际上正在返回这些数据,因为Kohana不会输出任何东西,因为我们告诉它不要。在after()方法中,执行以下操作:
if ($this->request->is_ajax()) {
$this->request->headers('Content-Type', 'application/json');
$this->response->body(json_encode($this->ajax_response));
}
然后,您可以自由地解释该响应,但是您认为适合客户端应用程序中的jQuery:
$.ajax({
type: "POST",
url: "http://www.website.com/controller/foobar/" + foobarId,
dataType: 'json',
success: function (data) {
if (!data.success) {
alert(data.error);
} else {
// Handle the returned data.
}
},
error: function (xhr, status, errorThrown) {
// Something went very wrong (response failed completely).
alert(errorThrown);
}
});
建立你的应用程序祝你好运!我希望这有助于至少让你开始。