php – 如何通过控制器调用模型中的方法? Zend框架

我一直在寻找教程以更好地理解这一点,但我没有运气.请原谅漫长的探索,但我想确保自己解释得很好.

首先,我对MVC结构很陌生,尽管我一直在做教程和学习.

我一直在将一个实时网站转移到Zend Framework模型中.到目前为止,我拥有views / scripts / index / example.phtml中的所有视图.

因此,我使用一个IndexController,每个页面的每个Action方法都有代码:IE公共函数exampleAction()

因为我不知道如何与模型交互,所以我将所有方法都放在控制器的底部(胖控制器).

所以基本上,我有一个使用View和Controller而没有模型的工作站点.

现在我正在努力学习如何整合模型.

所以我创建了一个View:

view/scripts/calendar/index.phtml

我创建了一个新的Controller:

controller/CalendarControllers.php

以及一个新模型:

model/Calendar.php

问题是我认为我没有正确地与模型沟通(我还是OOP的新手).

你能看看我的控制器和模型,告诉我你是否看到了问题.

我需要从runCalendarScript()返回一个数组,但我不确定我是否可以将数组返回到对象中,就像我正在尝试的那样?我真的不明白如何从控制器“运行”runCalendarScript()?

谢谢你的帮助!为了简洁起见,我正在剥离方法的大部分内容:

控制器:

<?php

class CalendarController extends Zend_Controller_Action
{

    public function indexAction()
    {
        $finishedFeedArray = new Application_Model_Calendar(); 

  $this->view->googleArray = $finishedFeedArray;
    }
}

模型:

   <?php

    class Application_Model_Calendar
    {

 public function _runCalendarScript(){
     $gcal = $this->_validateCalendarConnection();
     $uncleanedFeedArray = $this->_getCalendarFeed($gcal);
     $finishedFeedArray = $this->_cleanFeed($uncleanedFeedArray); 

     return $finishedFeedArray;

 }


    //Validate Google Calendar connection
    public function _validateCalendarConnection()
    {
     ...
        return $gcal;
    }


    //extracts googles calendar object into the $feed object
    public function _getCalendarFeed($gcal)
    {
     ...
     return $feed;
    }

    //cleans the feed to just text, etc
    protected function _cleanFeed($uncleanedFeedArray)
    {
 $contentText = $this->_cleanupText($event);
        $eventData = $this->_filterEventDetails($contentText);

 return $cleanedArray;
     }

     //Cleans up all formatting of text from Calendar feed
     public function _cleanupText($event)
     {
 ...
 return $contentText;
      }



       //filterEventDetails 
       protected function _filterEventDetails($contentText)  
        {
             ...
             return $data;
 }
    }

编辑:抱歉 – 我不知道为什么我的代码格式看起来如此难看……

最佳答案 乔尔,

所以你将整个模型对象放入一个名为$finishedFeedArray的变量中,这会让人感到困惑(它不是一个数组,而是一个对象).

我认为这就是你的问题所在.然后,您尝试将此变量提供给您的视图,我假设您在视图中显示值.在您的视图脚本中,任何将此变量视为数组的尝试都会导致问题.

试试这个:

class CalendarController extends Zend_Controller_Action
{

    public function indexAction()
    {
        $calendar = new Application_Model_Calendar(); 

        $this->view->googleArray = $calendar->_runCalendarScript();
    }
}

那里有一个小问题…我不会将带有下划线的公共函数命名为第一个字符.否则,此更改应至少从代码中解决一个问题.

点赞