在我当前实现的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
这里有一个很容易理解的控制器:
// 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);现在问题是..。
对于这些不与数据库交互的“时髦”的小页面类,最佳的过程是什么?在本例中,我将这个小类与模型一起存储,在某些情况下,可能只是在模型类中添加额外的方法来做一些有趣的事情。是一个很好的实践吗?或者库和时髦类都应该放在模型中,这样控制器就更瘦了(但是这个模型可以在其他地方使用,而不需要会话和有趣)?
发布于 2013-07-23 17:28:30
我会找个帮手。
funkify()似乎是一个适当的助手函数,可以防止大量重复的代码。
下面是它们上的代码点火器文档页面:http://ellislab.com/codeigniter/user-guide/general/helpers.html
如果您所处的情况是助手函数非常特定,只能在一个地方使用,则仍然可以使用助手。以控制器的名称命名助手,例如page_helper.php。
page_helper.php
function funkify($params) {
// do funky stuff
return $funky_params;
}然后在你的控制器里:
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);
}我没有任何借口,但有时,如果我需要一个剃须刀特定的功能,将只在一个位置(例如,控制器),我会把它放在控制器的档案。您可以在类定义之外粘贴一个函数,它的作用就像一个助手,并且是全局可用的(只要加载了该控制器)。还可以在视图中定义函数。令人讨厌,但有可能。我不喜欢经常这样做,因为它是不寻常的,不被期望(由我自己或其他开发人员)
https://stackoverflow.com/questions/17602017
复制相似问题