MVC模式:如果模型需要调用其视图的函数,该如何解决?

时间:2018-07-18 05:00:17

标签: php model-view-controller

请帮助我根据MVC模式修复此代码。我是MVC的新手。 在我的项目中,我必须建立一个视图树和模型作为父子层次结构。 但是我停留在一个点(在代码示例中给出),模型需要它的视图来调用带有模型数据的视图函数。作为初学者的理论,我可能难以实现。如果可能的话,还请提出其他更好的方法。

请提供一些代码解决方案。

这是示例PHP代码:

class model{
    $data = array();
    $model childModelArray[];  // keeps root model's child list
}
class view{
    $controller;
    function ShowChild()
    {   

        if (count($this->controller->model->childModelArray) > 0)
        {   
            echo '<div class="SubChildBox">';
            foreach ($this->controller->model->childModelArray as $nextChildModel){
                 //PROBLEM: model object  nextChildModel  need to call view object!!! ShowAsChild()  !!!
                 // Help on this please 
                 $this->ShowAsChild();
            }
            echo '</div>';
        }
    }
}

1 个答案:

答案 0 :(得分:1)

首先,视图不必是类。它们大多数是html。您可以通过使用具有默认值的形式参数来解决问题。如果形式参数不存在,则它是控制器的参数

class model{
    $data = array();
    $model childModelArray[];  // keeps root model's child list
}
class view{
    $controller;
    function ShowChild($childModelArray = false)
    {   
        $childModelArray = $childModelArray === false ? $this->controller->model->childModelArray : $childModelArray;
        if ($childModelArray && count($childModelArray) > 0)
        {   
            echo '<div class="SubChildBox">';
            foreach ($childModelArray as $nextChildModel){
                 //PROBLEM: model object  nextChildModel  need to call view object!!! ShowAsChild()  !!!
                 // Help on this please 
                 $this->ShowAsChild($nextChildModel);
            }
            echo '</div>';
        }
    }
}