我一直在寻找教程以更好地理解这一点,但我没有运气。请原谅漫长的探索,但我想确保自己解释得很好。
首先,我对MVC结构很陌生,不过我一直在做教程和学习。
我一直在将一个实时网站转移到Zend Framework模型中。到目前为止,我拥有views / scripts / index / example.phtml中的所有视图。
因此,我使用一个IndexController,每个页面的每个Action方法都有代码:IE public function exampleAction()
因为我不知道如何与模型交互,所以我将所有方法放在控制器的底部(一个胖控制器)。
所以基本上,我有一个使用View and Controller而没有模型的工作站点。
...
现在我正在努力学习如何整合模型。
所以我创建了一个View:
view/scripts/calendar/index.phtml
我在:
创建了一个新的Controllercontroller/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;
}
}
编辑:抱歉 - 我不知道为什么我的代码格式看起来如此难看......
答案 0 :(得分:2)
乔尔, 所以你将整个模型对象放入一个名为$ finishedFeedArray的变量中,这会让人感到困惑(它不是一个数组,它是一个对象)。
我认为这就是你的问题所在。然后,您尝试将此变量提供给您的视图,我假设您在视图中显示值。在您的视图脚本中,任何将此变量视为数组的尝试都会导致问题。
试试这个:
class CalendarController extends Zend_Controller_Action
{
public function indexAction()
{
$calendar = new Application_Model_Calendar();
$this->view->googleArray = $calendar->_runCalendarScript();
}
}
那里有一个小问题......我不会将带有下划线的公共函数命名为第一个字符。否则,此更改应至少从代码中消失一次。