我正在尝试为网页构建移动应用程序,该应用程序完全在PHP Codeigniter框架中实现。我想我会重新使用网站的移动应用服务器API。为此,我需要RESTfull服务。
事情是我根本不懂PHP!从我收集的信息来看,建立在Codeigniter上的网站通常没有公共端点来调用它的API。 一个例子是Ion-auth。身份验证在PHP级别完成,没有REST服务。
所以我的问题是......我上面写的内容是否有任何意义,我正确地理解了框架?如果是这样,这是否意味着,我必须为我的移动应用程序编写单独的服务器,它具有完全相同的功能和数据库,或者是否有办法优雅地重用当前服务?
我研究了codeigniter-restserver,但似乎我必须重写网站中的所有逻辑,我宁愿在春天或节点中进行。
答案 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>
的示例