0

我是 Codeigniter 菜鸟,虽然我有大约 2 年的 PHP 经验。我已经阅读了 Codeigniter 文档,并创建了一些简单的示例,但现在我正在着手进行一个实际项目,并且我想确保我能走上正轨。

这是问题所在:我正在构建一个单页游戏应用程序,并且在该页面上会有很多动态/数据库数据。我已经为页面创建了一个控制器和视图,到目前为止一切都非常简单:

//controller (application/controllers/main.php)
class Main extends CI_Controller {

    public function index()
    {
            $this->load->model('Model');        //load DB abstraction model
            $this->load->helper('url');     //load URL helper (base_url() function etc)

            $data = array("somestuff","otherstuff");//some general data for the page

        $this->load->view('header');
        $this->load->view('mainview', $data);
        $this->load->view('footer');
    }   
}

//view (application/views/mainview.php)
<div id="container">
    <div id="tab1">
        some data related to logged in user
    </div>
    <div id="tab2">
        some data related to game
    </div>
</div>

现在,你看,我们可以将应该在页面上显示的数据分成两组——用户数据和应用程序数据。自然的 OOP 方法是:

1)创建一个用户类并使用其中的一个函数来获取和显示用户数据(加载模型,因为我们使用的是MVC)

2) 创建一个或多个与游戏相关的类,并使用这些类来计算和显示当前游戏数据

为简单起见,假设我只需要一个 Game 类。

我遇到的麻烦是将我的想法包裹在正确的 CodeIgniter 方法上。用户指南提到了用户创建的库、用户创建的控制器和用户创建的类。这些库对我来说有点令人困惑,因为我不明白它们在这里有何不同。

由于我已经有一个页面控制器(我认为这也是自然的方法,但如果我错了请纠正我),我如何集成用户/游戏类?我有一些具体的问题应该可以帮助我弄清楚这一点。

1) 用户/游戏应该是扩展 CI_Controller 的新控制器吗?

2)类应该放在“库”目录中还是直接放在控制器中?

3)他们应该与主控制器有什么关系(假设我首先创建它是正确的)?

4

2 回答 2

1

我给你一些线索。

根据我的经验和我所看到的:

控制器在提供文本、json、html 等格式化数据时
使用。或者在接收输入并最终重定向到其他页面时使用。
控制器可以有一些私有方法被其他方法用来格式化或检查一些数据。

库可以作为控制器和模型之间的桥梁。
它们适用于模型或其他库,或者只是原生 PHP。
通常,库处理控制器接收到的数据,并在检查或使用它们后将它们传递给模型。

库也可以是类,代表一个实体,你必须实例化它$Obj = new SomeObject()(你必须包含类文件)。
在这种情况下,不使用单例模式。

  • 因此,如果您的控制器收到输入credit_brought
  • 它检查是否credit_brought是一个数字(最终)
  • 它调用正确的类方法$User->add_credit()
    • credit_brought如果不是数字,该方法可能会引发异常
    • 它可以做一些检查,比如“这个用户在那一小时内获得了足够的信用”
    • 该方法可以调用模型$this->user_model->add_credit()
      • 进行 SQL 查询,例如:$this->db->set('credit', 'credit +'.$credit, FALSE)->where('id', $userid)->update('users')
  • 完成后,$User->add_credit()向控制器返回一些响应(在这种情况下为布尔值)
  • 控制器将适当的数据返回给客户端(视图或 ajax 响应或..)

我不确定我是否对我糟糕的英语很清楚..

在 CI doc 中,阅读您可以在目录中找到的IntroductionGeneral Topics页面

如果您发现任何拼写错误,请纠正我。

于 2013-11-10T14:00:51.487 回答
1

我认为最好将 Game 和 User 控制器分开,因为它们代表不同的资源。但是要通过项目符号回答您的问题:

  1. 是的,UserController 和 GameController 应该扩展 CI_Controller 以便能够响应来自前端控制器的传入请求。
  2. 它们默认放置在控制器文件夹中。
  3. 嗯,MainController 的 index() 方法创建了将使用 AJAX 请求与 UserController 和 GameController 方法交互的 JS 对象。
于 2013-11-10T14:18:45.830 回答