codeigniter 类中的 api

Posted

技术标签:

【中文标题】codeigniter 类中的 api【英文标题】:api in a class in codeigniter 【发布时间】:2012-03-13 16:07:01 【问题描述】:
class Api extends CI_Controller 

   public function index()
   
        show_error("You are not authorized to access this page", 401);
   

我有一个 api 类 class Api extends CI_Controller 和另一个class myproject extends ,现在如果想在 myproject 类中使用 api 类的功能。我能怎么做 。我必须创建一个 api 类的对象还是只用 parent::api 类扩展 myproject 类。请帮助我,因为我不擅长 oops。

details - 我创建了一个类“class myproject extends ci_controller”,它对用户注册和登录应用程序具有不同的功能。使用单个控制器一切正常。但是现在想使用一个api文件。它具有登录功能。我如何从“class myproject”调用 api 文件中的这些函数

【问题讨论】:

不清楚,但我怀疑 API 类作为库会比控制器更好地工作 【参考方案1】:

您应该只需要扩展 API 类,如下所示

class Myproject extends Api  ... 

但还有一些其他问题,例如include_once("Api.php"),例如在 Myproject.php 文件中,以便子类可以“看到”超类声明。 codeigniter 论坛上的 thread 讨论了这些问题(对于 google webcache 版本很抱歉,但该论坛目前正在停机维护)。

【讨论】:

【参考方案2】:

您可以创建一个助手,例如表格一并使用您的方法。 然后你就可以加载它了:

$this->load->helper('api');

【讨论】:

【参考方案3】:

首先,你不能在控制器中调用控制器的函数,除非你继承它。

最好将 API 类创建为库,而不是控制器。

如果您有一些限制只能将其用作控制器,则可以通过 curl 调用使用这些 API。

但最好的方法是将它们放在帮助程序中,如果您仅从自己的服务器访问它们。

【讨论】:

【参考方案4】:

首先,这看起来更像是一个软件设计问题,而不是真正的代码问题。

CodeIgniter 是基于 MVC 概念的,Controller 只是用来搭建页面的。 您可能应该为所有 API 功能创建一个库,并让控制器调用该库并将数据转换为 JSON 或您希望将其转换为的任何内容。

对于我自己,我应用了一个简单的规则: 永远不要编写/调用不生成任何形式输出的 Controller 方法。

我建议你坚持 CodeIgniter 的编码方式,而不是试图避免它们。

【讨论】:

以上是关于codeigniter 类中的 api的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter分页类中的自定义查询

Codeigniter - 无法命中类中的方法

在codeigniter中将数组从控制器传递到模型

CodeIgniter 在同一个类中调用函数

公共函数与 CodeIgniter 中的函数

CodeIgniter 会话为空