首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于那些似乎不适合作为CodeIgniter中的模型或库的页面特定的小类,该怎么办?

对于那些似乎不适合作为CodeIgniter中的模型或库的页面特定的小类,该怎么办?
EN

Stack Overflow用户
提问于 2013-07-11 19:41:41
回答 1查看 164关注 0票数 2

在我当前实现的MVC设计模式中(使用PHP和CodeIgniter演示):

假设我有一个位于"www.mysite.com/blue/page“的”页面“,它最终是由以下(大大简化的)文件生成的:

/libraries

亲水相session_lib.php

/controllers

亲水相/red

亲水相/white

亲水相/blue

粉末冶金  page.php

/models

亲水相/red

亲水相/white

亲水相/blue

粉末冶金  funky_class.php

粉末冶金  page_model.php

/views

亲水相/red

亲水相/white

亲水相/blue

粉末冶金  page.php

这里有一个很容易理解的控制器:

代码语言:javascript
复制
// FILE: /controllers/blue/page.php

// Get some paramaters from URL
$params = $this->input->get();

// Use a library to do some stuff with these params with a session
$this->load->library('session_lib');
$this->session_lib->store_in_session($params);

// Use a very page specific class to do some funky stuff with the params
$this->load->model('blue/funky_class');
$funkified_params = $this->funky_class->funkify($params);

// Pass params to a model
$this->load->model('blue/page_model');
$data['output_from_db'] = $this->page_model->get_some_output_from_db($funkified_params);

// Send to view
$this->load->view('blue/page', $data);

现在问题是..。

对于这些不与数据库交互的“时髦”的小页面类,最佳的过程是什么?在本例中,我将这个小类与模型一起存储,在某些情况下,可能只是在模型类中添加额外的方法来做一些有趣的事情。是一个很好的实践吗?或者库和时髦类都应该放在模型中,这样控制器就更瘦了(但是这个模型可以在其他地方使用,而不需要会话和有趣)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-23 17:28:30

我会找个帮手。

  • 当加载了一个助手时,该函数将在全局范围内可用,因此您可以在任何地方调用它。
  • 它们非常适合小型的独立函数,它们只做一件与模型或库中的代码不一定相关的事情。
  • 当我在一种或另一种格式之间转换东西时( convert_timezone,change_query_string)或者做一些你不想去想的小任务(force_ssl,is_image,uri_string)时,帮助者尤其擅长于我。

funkify()似乎是一个适当的助手函数,可以防止大量重复的代码。

下面是它们上的代码点火器文档页面:http://ellislab.com/codeigniter/user-guide/general/helpers.html

如果您所处的情况是助手函数非常特定,只能在一个地方使用,则仍然可以使用助手。以控制器的名称命名助手,例如page_helper.php

page_helper.php

代码语言:javascript
复制
function funkify($params) {
    // do funky stuff
    return $funky_params;
}

然后在你的控制器里:

代码语言:javascript
复制
class Page extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->helper('page');
    }

    public function page() {
        // do stuff
        $funky_params = funkify($params);
        // do more stuff
        $this->load->view('blue/page', $data);
    }

我没有任何借口,但有时,如果我需要一个剃须刀特定的功能,将只在一个位置(例如,控制器),我会把它放在控制器的档案。您可以在类定义之外粘贴一个函数,它的作用就像一个助手,并且是全局可用的(只要加载了该控制器)。还可以在视图中定义函数。令人讨厌,但有可能。我不喜欢经常这样做,因为它是不寻常的,不被期望(由我自己或其他开发人员)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17602017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档