2016-07-29 72 views
2

我對PHP和Kohana非常新穎。已經創建了一個在WAMP服務器上成功運行的示例/演示「hello World」PHP Kohana應用程序。如何用平靜的webservices創建一個PHP Kohana應用程序?

我希望我的應用程序能夠作爲完整的服務器端組件工作。

因爲我在這個應用程序中只有服務器端邏輯,所以它應該使用ORM與我的MySQL數據庫進行通信。

我將有一個單獨的客戶端應用程序,它將有UI部分。

所以我想我的PHP-Kohana應該識別來自我的客戶端的RestFul webservices調用,並相應地給出JSON響應。

是否可以創建一個支持RestFul webservices的Kohana應用程序?

如果是,請給我一個指導,在Kohana應用程序中創建Web服務。

是否有任何這樣的示例代碼演示?

回答

1

有沒有具體的演示或示例代碼,我知道的,所以希望這些提示將幫助您開始使用它...

這是可能的,而且比較容易,接受AJAX請求,併產生JSON對Kohana的迴應。首先要注意的是,除非特別指出,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不會輸出任何東西,因爲我們已經告訴它不要。在你()方法之後,請執行下列操作:

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); 
    } 
}); 

好運與建立你的應用程序!我希望這有助於至少讓你開始。

相關問題