Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter-MVC方法问题_Php_Codeigniter_Activerecord - Fatal编程技术网

Php CodeIgniter-MVC方法问题

Php CodeIgniter-MVC方法问题,php,codeigniter,activerecord,Php,Codeigniter,Activerecord,我目前正在CodeIgniter中制作一个应用程序,我想知道我应该如何处理模型。我目前的设置方式: 视图:显示 控制器:显示相关内容、表单验证、重定向、与库对话等 库:进行繁重的工作、与模型对话、生成错误消息、日志等 模型:与数据库对话 (我目前在大多数情况下都使用活动记录) 让我直接来看一个例子: 我有一个Auth库,里面有一些类似的查询,只根据WHERE子句中的值变化 例: 我应该有一堆重复的模型函数,还是应该只有一个简单的函数,通过库传递where子句等等 例: 如果你想让我澄清什么,请告

我目前正在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 );
    }
}