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

时间:2010-06-07 03:00:28

标签: php oop zend-framework model

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

首先,我对MVC结构很陌生,不过我一直在做教程和学习。

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

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

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

所以基本上,我有一个使用View and 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;
 }
    }

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

1 个答案:

答案 0 :(得分:2)

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

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

试试这个:

class CalendarController extends Zend_Controller_Action
{

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

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

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