2016-12-11 10 views
0

Я пытаюсь создать мобильное приложение для веб-страницы, которое полностью реализовано в фреймворке PHP Codeigniter. Я решил, что буду использовать API-интерфейс веб-сайта для мобильного приложения. Для этого мне нужны RESTfull услуги.Использование RESTfull с фреймворком Codeigniter

Дело в том, что я вообще не знаю PHP! И из того, что я собираю, веб-сайты, созданные на Codeigniter, обычно не имеют открытой конечной точки для вызова своего API. Одним из примеров будет Ion-auth. Аутентификация выполняется на уровне PHP без служб REST.

Так что мой вопрос ... делает то, что я написал выше, имеет смысл, и я правильно понял рамки? Если это так, значит ли это, мне нужно будет написать отдельный сервер для моего мобильного приложения, который будет иметь точно такие же функции и базу данных, или, может быть, есть способ изящно использовать текущие услуги?

Я исследовал около codeigniter-restserver, но, похоже, мне пришлось бы переписать всю логику на веб-сайте, и я предпочел бы сделать это весной или узлом.

ответ

1

Для этого вы получите довольно субъективную группу ответов. Есть несколько способов сделать то, что вы, похоже, ищете.

Во-первых, это отдельный контроллер «API» с контроллером CodeIgniter-restserver, который дублирует все функции вашего контроллера. Это было бы неоптимальным, так как вам нужно будет поддерживать код своего сайта в двух местах.

Другой, немного лучший вариант - проверить на $this->input->is_ajax_request() или что-то подобное, отправленное мобильным приложением, а затем отправить ответы обратно с сервера restserver, но обычный view() для веб-сайта.

В конечном счете, и ваш лучший вариант - это реорганизовать весь ваш код, создавая единую конечную точку API-интерфейса кода (здесь вам нужно будет решить, является ли CI разумным API или если вы хотите использовать что-то еще) и ваш сайт и мобильные приложения используют его.

Редактировать

Я просто понял, что вы конкретно упоминается ионно-аутентификации, и я, случается, есть модуль пользователей PyroCMS под открытым.

if ($this->input->is_ajax_request()) 
     { 
      $user = $this->ion_auth->get_user_by_email($user->email); 
      $user->password = ''; 
      $user->salt = ''; 

      exit(json_encode(array('status' => true, 'message' => lang('user:logged_in'), 'data' => $user))); 
     } 

так, для restserver вы могли бы вместо того, чтобы отправить обратно:

$this->response(array('status' => true, 'message' => lang('user:logged_in'), 'data' => $user)), 200); 

Edit 2 Что касается как отправлять почтовые данные с помощью Ajax, это действительно совершенно другой вопрос, от OP, но быстрый пример использования JQuery:

// Not complete code 
<script> 
// Attach a submit handler to the form 
$("#searchForm").submit(function(event) { 

    // Stop form from submitting normally 
    event.preventDefault(); 

// Get some values from elements on the page: 
var $form = $(this), 
    term = $form.find("input[name='s']").val(), 
    url = $form.attr("action"); 

    // Send the data using post 
    var posting = $.post(url, { s: term }); 

// Put the results in a div 
posting.done(function(data) { 
    var content = $(data).find("#content"); 
    $("#result").empty().append(content); 
    }); 
}); 
</script> 

Пример из https://api.jquery.com/jquery.post/

+0

хорошо, но как я могу узнать, как направить запрос ajax на сервер из моего приложения? Кроме того, как я могу узнать, как должен выглядеть метод POST? – Medardas

+0

Codeigniter говорит 'is_ajax_request()' "Проверяет, установлен ли заголовок сервера HTTP_X_REQUESTED_WITH, и возвращает логический TRUE, если он есть, или FALSE, если нет." $ _Почтовые данные (отправленные ajax) получают то же самое с CI для Ajax или «регулярного» представления формы, используя '$ this-> input-> post()' На любопытном обмане способ сделать это тоже искать что-то задано в данных post, например: 'if ($ this-> input-> post ('from_mobile') == 1) {...}' и не беспокоиться о заголовках HTTP ... Хорошее место для чтения в классе ввода: https://www.codeigniter.com/user_guide/libraries/input.html –

+0

см. Редактировать 2 для отправки запросов ajax. –