3

我正在使用MVC PHP框架Codeigniter,并且我有一个关于从何处调用redirect()的简单问题:控制器或模型?我应该从我的控制器或MVC框架模型中调用redirect()吗?

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

回答

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"); 
    } 
} 

模型对数据仅供要么返回标准结果如键/值对象或布尔值。

所有的逻辑都应该由控制器处理/控制。

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

+0

+1 - 我喜欢这个答案比我好。 – jmort253 2011-01-05 06:53:42

+0

感谢Robert和jmort。这是我正在寻找的直接类型的答案。 – justinl 2011-01-05 06:58:43

+0

有道理..谢谢先生! – GianFS 2013-09-02 03:25:39

1

看起来控制器将是调用重定向的最佳位置,因为控制器通常将调用委托给模型,视图或您的案例中的另一个控制器。

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

总之,如果一个同事试图修正代码中的错误,那么“合理的人”标准会说什么?他们中的大多数人最可能在哪里寻找你的重定向?

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

+0

任何机会的.NET的人:) – RobertPitt 2011-01-05 06:55:16

+0

哈哈,没有J2EE/Java的主要,但我在大学学到了一些.NET,并有一些.NET的朋友:) – jmort253 2011-01-05 07:02:20

相关问题