将RESTfull与Codeigniter框架一起使用

时间:2016-12-11 14:03:32

标签: php rest codeigniter restful-authentication ion-auth

我正在尝试为网页构建移动应用程序,该应用程序完全在PHP Codeigniter框架中实现。我想我会重新使用网站的移动应用服务器API。为此,我需要RESTfull服务。

事情是我根本不懂PHP!从我收集的信息来看,建立在Codeigniter上的网站通常没有公共端点来调用它的API。 一个例子是Ion-auth。身份验证在PHP级别完成,没有REST服务。

所以我的问题是......我上面写的内容是否有任何意义,我正确地理解了框架?如果是这样,这是否意味着,我必须为我的移动应用程序编写单独的服务器,它具有完全相同的功能和数据库,或者是否有办法优雅地重用当前服务?

我研究了codeigniter-restserver,但似乎我必须重写网站中的所有逻辑,我宁愿在春天或节点中进行。

1 个答案:

答案 0 :(得分:1)

你会得到一个非常主观的答案组。有几种方法可以做你正在寻找的东西。

首先,它是一个独立的“API”控制器,带有CodeIgniter-restserver,它复制了所有控制器功能。这将是次优的,因为您必须在两个地方维护您的网站代码。

另一个稍微好一点的选择是检查移动应用发送的$this->input->is_ajax_request()或类似内容,然后将回复发送回restserver,但通常是view()用于网站。

最终,您最好的选择是重构所有代码,制作单个代码库API端点(这是您必须决定CI是否是合理的API或者您是否想要使用其他内容的地方)和您的网站和移动应用程序使用它。

修改

我刚才意识到你特意提到了ion-auth,我碰巧打开了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);

编辑2 关于如何使用Ajax发送post数据,这真的是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/

的示例