我一直在寻找教程以更好地理解这一点,但我没有运气.请原谅漫长的探索,但我想确保自己解释得很好.
首先,我对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();
}
}
那里有一个小问题…我不会将带有下划线的公共函数命名为第一个字符.否则,此更改应至少从代码中解决一个问题.