将 RESTfull 与 Codeigniter 框架结合使用
Using RESTfull with Codeigniter framework
我正在尝试为完全在 PHP Codeigniter 框架中实现的网页构建移动应用程序。我想我会为移动应用重用网站的服务器 API。为此,我需要 RESTfull 服务。
问题是我根本不知道 PHP!据我所知,基于 Codeigniter 构建的网站通常没有 public 端点来调用它的 API。
Ion-auth 就是一个例子。身份验证在 PHP 级别完成,没有 REST 服务。
所以我的问题是...我上面写的是否有意义并且我是否正确理解了框架?如果是这样,是否意味着我必须为我的移动应用程序编写单独的服务器,该服务器将具有完全相同的功能和数据库,或者是否可以优雅地重用当前服务?
我已经研究过 codeigniter-restserver,但似乎我必须重写网站中的所有逻辑,我宁愿在 spring 或节点中进行。
你会得到一组相当主观的答案。有几种方法可以完成您似乎正在寻找的事情。
首先,是一个带有 CodeIgniter-restserver 的单独 "API" 控制器,它复制了您所有的控制器功能。这将不是最佳选择,因为您必须在两个地方维护您网站的代码。
另一个稍微好一点的选择是检查移动应用程序发送的 $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>
我正在尝试为完全在 PHP Codeigniter 框架中实现的网页构建移动应用程序。我想我会为移动应用重用网站的服务器 API。为此,我需要 RESTfull 服务。
问题是我根本不知道 PHP!据我所知,基于 Codeigniter 构建的网站通常没有 public 端点来调用它的 API。 Ion-auth 就是一个例子。身份验证在 PHP 级别完成,没有 REST 服务。
所以我的问题是...我上面写的是否有意义并且我是否正确理解了框架?如果是这样,是否意味着我必须为我的移动应用程序编写单独的服务器,该服务器将具有完全相同的功能和数据库,或者是否可以优雅地重用当前服务?
我已经研究过 codeigniter-restserver,但似乎我必须重写网站中的所有逻辑,我宁愿在 spring 或节点中进行。
你会得到一组相当主观的答案。有几种方法可以完成您似乎正在寻找的事情。
首先,是一个带有 CodeIgniter-restserver 的单独 "API" 控制器,它复制了您所有的控制器功能。这将不是最佳选择,因为您必须在两个地方维护您网站的代码。
另一个稍微好一点的选择是检查移动应用程序发送的 $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>