我应该从 MVC 框架中的控制器或模型中调用 redirect() 吗?
Posted
技术标签:
【中文标题】我应该从 MVC 框架中的控制器或模型中调用 redirect() 吗?【英文标题】:Should I call redirect() from within my Controller or Model in an MVC framework? 【发布时间】:2011-06-03 20:10:54 【问题描述】:我正在使用 MVC php 框架 Codeigniter,我有一个直截了当的问题,即从哪里调用 redirect():控制器还是模型?
场景: 用户导航到 www.example.com/item/555。在我的模型中,我在项目数据库中搜索 ID 为 555 的项目。如果找到该项目,我会将结果返回给我的控制器。但是,如果找不到某个项目,我想将用户重定向到某个地方。对 redirect() 的调用应该来自模型内部还是控制器内部?为什么?
【问题讨论】:
【参考方案1】:你的模型不应该返回 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");
模型仅用于数据,要么返回标准结果,例如键/值对象或布尔值。
所有逻辑都应由控制器处理/控制。
模型不是特定于页面的,而是在整个应用程序中全局使用,因此如果另一个类/方法使用该模型,它可能会被重定向到不正确的位置,因为它是您网站的不同部分。
【讨论】:
感谢罗伯特和 jmort。这是我一直在寻找的直截了当的答案。【参考方案2】:控制器似乎是调用重定向的最佳位置,因为控制器通常将调用委托给模型、视图或在您的情况下为另一个控制器。
但是,您应该使用最适合您的应用程序以及将来更容易维护的东西,但也要考虑到规则的存在是有原因的。
简而言之,如果同事要尝试修复代码中的错误,“理性人”标准会怎么说?他们中的大多数人最有可能在哪里寻找您的重定向?
另外,您说您已经将结果返回到您的控制器...也许这就是您应该进行重定向的地方...
【讨论】:
大声笑,主要不是 J2EE/Java,但我在大学里学了一些 .NET 并有一些 .NET 朋友 :)以上是关于我应该从 MVC 框架中的控制器或模型中调用 redirect() 吗?的主要内容,如果未能解决你的问题,请参考以下文章
C# MVC 架构,我应该从 MODEL 还是 CONTROLLER 调用存储过程