Я очень очень плохо знаком с PHP и Kohana. Уже создан пример / демо-приложение «Hello World» PHP Kohana, которое успешно работает на WAMP-сервере.
Я хочу, чтобы мое приложение работало как полноценный компонент на стороне сервера.
Поскольку в этом приложении у меня будет только логика на стороне сервера, оно должно использовать ORM для связи с моей базой данных MySQL.
У меня будет отдельное клиентское приложение, в котором будут части пользовательского интерфейса.
Поэтому я хочу, чтобы мой PHP-Kohana распознал вызов веб-сервисов RestFul от моего клиента и соответственно дал ответ JSON.
Можно ли создать приложение Kohana, которое поддерживает веб-сервисы RestFul?
Если да, дайте мне руководство по созданию веб-сервисов в приложении Kohana.
Есть ли такой пример кода для демонстрации?
Я не знаю конкретного демо или примера кода, поэтому надеюсь, что эти советы помогут вам начать с ним …
Можно и относительно легко принимать запросы AJAX и создавать ответы 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.';
}
}
После этого вы сможете запросить эти данные, позвонив по URL-адресу, например: 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);
}
});
Удачи в создании вашего приложения! Надеюсь, это поможет вам хотя бы начать.
Других решений пока нет …