【问题标题】:Should I call redirect() from within my Controller or Model in an MVC framework?我应该从 MVC 框架中的控制器或模型中调用 redirect() 吗?
【发布时间】:2011-06-03 20:10:54
【问题描述】:

我正在使用 MVC PHP 框架 Codeigniter,我有一个直截了当的问题,即从哪里调用 redirect():控制器还是模型?

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

【问题讨论】:

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


    【解决方案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 朋友 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多