我应该从我的控制器或模型中调用MVC框架中的redirect()吗?

时间:2011-01-05 06:38:27

标签: model-view-controller codeigniter redirect model controller

我正在使用MVC PHP框架Codeigniter,我有一个关于从哪里调用redirect()的直接问题:Controller或Model?

方案:
用户导航到www.example.com/item/555。在我的模型中,我在项目数据库中搜索ID为555的项目。如果找到该项目,我会将结果返回给我的控制器。但是,如果找不到某个项目,我想将用户重定向到某个地方。这个对redirect()的调用是来自模型内部还是控制器?为什么呢?

2 个答案:

答案 0 :(得分:6)

你的模型不应该返回false,你应该像这样检查你的控制器:

class SampleModel extends Model
{
    //Construct

    public function FetchItem($id)
    {
        $result = $this->db->select("*")->from("table")->where("item_id",$id)->get();
        if($result->num_rows() == 0)
        {
             return false;
        }
        //return result
    }
}

并在您的控制器内执行:

function item($id)
{
     $Item = $this->SampleModel->FetchItem($id);

     if(!$Item)
     {
          redirect("class/error/no_item");
     }
}

数据模型只返回标准结果,如键/值对象或布尔值。

所有逻辑都应由Controller处理/控制。

模型不是特定于页面的,并且在整个应用程序中全局使用,因此如果另一个类/方法使用该模型,它可能会重定向到不正确的位置,因为它是站点的不同部分。

答案 1 :(得分:1)

控制器似乎是调用重定向的最佳位置,因为控制器通常会将调用委托给模型,视图或在您的情况下委托另一个控制器。

但是,您应该使用对您的应用程序最有意义的内容以及将来更容易维护的内容,但也要考虑规则确实存在的原因。

简而言之,如果同事试图修复代码中的错误,“合理的人”标准会说什么?大多数人最有可能在哪里寻找你的重定向?

另外,你说你已经将结果返回给你的控制器了......也许这就是你应该重定向的地方......