对于用php编写的项目,我可以在类控制器中调用多个(或多个)控制器吗? http://img192.imageshack.us/img192/7538/mvc03.gif
中的示例问:我需要从另一个控制器调用一个动作 ...如果我喜欢上面的图片,那我是不是出于道德规范?
谢谢, 维尼。
答案 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耦合!如果借用控制器中发生某些变化,则会对借用控制器产生影响。不好,琼斯博士。