【问题标题】:Using RESTfull with Codeigniter framework将 RESTfull 与 Codeigniter 框架一起使用
【发布时间】:2017-04-26 12:03:15
【问题描述】:

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

问题是我根本不懂 PHP!据我所知,基于 Codeigniter 构建的网站通常没有公共端点来调用它的 API。 一个例子是 Ion-auth。身份验证在 PHP 级别完成,没有 REST 服务。

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

我研究过codeigniter-restserver,但似乎我必须重写网站中的所有逻辑,我宁愿在spring或node中进行。

【问题讨论】:

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


    【解决方案1】:

    你会得到一组相当主观的答案。有几种方法可以做您似乎正在寻找的事情。

    首先,它是一个带有 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)));
            }
    

    所以,对于其余服务器,您可以改为发回:

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

    编辑 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/的示例

    【讨论】:

    • 好的,但是我怎么知道如何将 ajax 请求从我的应用程序定向到服务器?此外,我怎么知道 POST 方法的外观如何?
    • Codeigniter 说 is_ajax_request() “检查 HTTP_X_REQUESTED_WITH 服务器标头是否已设置,如果设置则返回布尔值 TRUE,否则返回 FALSE。” $_Post 数据(由 ajax 发送)与 CI 访问相同的 Ajax 或“常规”表单提交使用 $this-&gt;input-&gt;post() 有点作弊的方法是寻找在 post 数据中设置的内容,例如:if ($this-&gt;input-&gt;post('from_mobile') == 1) {...} 而不是担心 HTTP 标头...阅读 Input 类的好地方:codeigniter.com/user_guide/libraries/input.html
    • 请参阅编辑 2 以发送 ajax 请求。
    • 我知道如何发送帖子请求,但我不知道消息正文应该是什么样子 =] 我的意思是用户名、密码、“rembmerme”以及必须提供的任何其他数据
    • 就获取表单值服务器端而言,它与旧相同。 $this-&gt;input-&gt;post('field_name')$this-&gt;post('field_name')(如果使用 restserver)。要在 ajax 中发送表单值,请查看此处:stackoverflow.com/questions/7426085/…
    猜你喜欢
    • 2012-03-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2023-04-11
    相关资源
    最近更新 更多