Php CodeIgniter-MVC方法问题
我目前正在CodeIgniter中制作一个应用程序,我想知道我应该如何处理模型。我目前的设置方式: 视图:显示 控制器:显示相关内容、表单验证、重定向、与库对话等 库:进行繁重的工作、与模型对话、生成错误消息、日志等 模型:与数据库对话 (我目前在大多数情况下都使用活动记录) 让我直接来看一个例子: 我有一个Auth库,里面有一些类似的查询,只根据WHERE子句中的值变化 例: 我应该有一堆重复的模型函数,还是应该只有一个简单的函数,通过库传递where子句等等 例: 如果你想让我澄清什么,请告诉我。Php CodeIgniter-MVC方法问题,php,codeigniter,activerecord,Php,Codeigniter,Activerecord,我目前正在CodeIgniter中制作一个应用程序,我想知道我应该如何处理模型。我目前的设置方式: 视图:显示 控制器:显示相关内容、表单验证、重定向、与库对话等 库:进行繁重的工作、与模型对话、生成错误消息、日志等 模型:与数据库对话 (我目前在大多数情况下都使用活动记录) 让我直接来看一个例子: 我有一个Auth库,里面有一些类似的查询,只根据WHERE子句中的值变化 例: 我应该有一堆重复的模型函数,还是应该只有一个简单的函数,通过库传递where子句等等 例: 如果你想让我澄清什么,请告
提前感谢。您可以在模型上使用PHP的_调用来处理任何简单的where子句:
public function __call($method, $parameters)
{
if (strpos($method, 'get_by_') === 0)
{
$this->get(array(substr($method, 7), $parameters[0]));
}
}
几个月前我也有同样的疑虑,所以我很清楚你是从哪里来的 我用 把它当作图书馆就行了。您可以按以下方式创建模型:
// user_m.php
<?php (defined('BASEPATH')) OR exit('No direct script access allowed');
class User_m extends MY_Model
{}
或
它有你需要的所有基本积垢操作。只要阅读代码,它也有很好的文档记录。如果您有很多针对给定模型的
get\u by.*
方法,那么使用TaylorOtwell建议的神奇方法是有意义的。实际上,\uuu call
方法以及\uu get
和\uu set
在其他框架中经常使用,以使您能够轻松地完成所说的内容。请记住,在映射时,CI不会很好地使用控制器上的_call Magic方法(但这不会影响模型)
我在CI中看待CMV的基本方式:
- 库——这是大部分“呈现逻辑”发生的地方,但通常应该是控制/模型/视图无关的。几乎完全无状态(我喜欢)
- Helpers——实用函数,大部分与视图相关(作为一个库(更正交,yada,yada,yada))
- 控制器——加载库/模型并调用方法
- 模型——DB包装层。几乎完全有状态(我喜欢)
- 视图--显示数据
class Users
{
function display( $id )
{
$this->load->library( 'myformatlib' );
$this->load->model( 'mymodel' );
$data = $this->mymodel->get_user( $id );
$formatted = $this->myformatlib->addColors( $data );
$this->mymodel->incrementViews( $id );
$this->load->view( 'full_user', $formatted );
}
}
至于传递where子句——DB查询几乎应该完全归属于模型,除非没有其他选项,否则这样做会非常麻烦(但我想知道您是否能够重构它)
// user_m.php
<?php (defined('BASEPATH')) OR exit('No direct script access allowed');
class User_m extends MY_Model
{}
$this->load->model('user_m');
$this->data['user'] = $this->user_m->get($user_id);
$this->load->model('user_m');
$this->data['user'] = $this->user_m->get_by(array('something_id' => $something));
class Users
{
function display( $id )
{
$this->load->library( 'myformatlib' );
$this->load->model( 'mymodel' );
$data = $this->mymodel->get_user( $id );
$formatted = $this->myformatlib->addColors( $data );
$this->mymodel->incrementViews( $id );
$this->load->view( 'full_user', $formatted );
}
}