Как я могу создать приложение PHP Kohana с успокаивающими веб-сервисами?

Я очень новичок в PHP и Kohana. Уже создан пример/демонстрация PHP-приложения Kohana "hello World", которое успешно работает на сервере WAMP.

Я хочу, чтобы мое приложение работало как полноценный серверный компонент.

Поскольку в этом приложении у меня будет только серверная логика, оно должно использовать ORM для связи с моей базой данных MySQL.

У меня будет отдельное клиентское приложение, в котором будут части пользовательского интерфейса.

Поэтому я хочу, чтобы мой PHP-Kohana распознавал вызов веб-сервисов RestFul от моего клиента и давал соответствующий ответ JSON.

Можно ли создать приложение Kohana, поддерживающее веб-сервисы RestFul?

Если да, дайте мне руководство по созданию веб-сервисов в приложении Kohana.

Есть ли такой пример кода для демонстрации?


person Rajaa    schedule 29.07.2016    source источник


Ответы (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.';
    }
}

Затем вы сможете запросить эти данные, вызвав 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);
    }
});

Удачи в создании вашего приложения! Я надеюсь, что это поможет вам хотя бы начать.

person SigmaSteve    schedule 30.07.2016