MVC - 我可以在类控制器中调用多个(或多个)控制器吗?

时间:2011-01-10 19:50:41

标签: php model-view-controller controller

对于用php编写的项目,我可以在类控制器中调用多个(或多个)控制器吗? http://img192.imageshack.us/img192/7538/mvc03.gif

中的示例

问:我需要从另一个控制器调用一个动作 ...如果我喜欢上面的图片,那我是不是出于道德规范?

谢谢, 维尼。

5 个答案:

答案 0 :(得分:2)

我确信你可以使用你正在使用的任何框架做你想做的事。如果由于某种原因无法原生地执行此操作,那么您可以根据需要扩展框架。

话虽如此,我个人不喜欢控制器调用另一个控制器的想法。如果仅从理论的角度来看,它似乎在某种程度上打破了MVC范式。我可能会做的是构建一个包含所需功能的库类,然后让两个控制器将该类实例化为成员并调用所需的函数。

例如,使用CodeIgniter:

库/ MyLib.php:

class MyLib
{
    public function MyFunc()
    { /* do whatever */ }
}

控制器/ ControllerA.php:

class ControllerA extends Controller
{
    public function index()
    { 
        $this->load->library('MyLib');
        $this->mylib->MyFunc();
    }
}

控制器/ ControllerB:

class ControllerB extends Controller
{
    public function index()
    {
        $this->load->library('MyLib');
        $this->mylib->MyFunc();
    }
}

答案 1 :(得分:1)

出伦理?任何......回到现实。

是的,控制器可以调用另一个控制器的动作。例如,在cakePHP中,此功能通过requestAction

提供
// pass uri to request action and receive vars back
$ot3 = $this->requestAction('/stories/xenu');

如果你自己推出,那么如何实现它的细节将非常具体到你的框架。

答案 2 :(得分:0)

然后你需要修改框架,找到控制器被启动的地方,并在那里添加你的第二个控制器。

你正在使用什么框架?

答案 3 :(得分:0)

您可以按照自己的方式进行操作。如果你不想,你不必使用MVC。但是,在MVC中,你真的应该只有一个控制器一次处于活动状态。您可能需要多个视图或模型,而不是另一个Controller。加载,例如,网站的页面和页脚的页眉和页脚视图没有任何错误。

答案 4 :(得分:0)

如果要构建另一个Controller,则认为您需要访问前一个Controller的功能才能访问其功能(因为它适用于特定/所需的Model),那么您为后者开发的Model可能需要重构。简而言之,您的目标模型可能做得太多。分手吧。

您试图通过调用已开发的Controller的方法来避免重复(DRY),但是这样做会在两个Controller之间创建TIGHT耦合!如果借用控制器中发生某些变化,则会对借用控制器产生影响。不好,琼斯博士。