views:

54

answers:

1

Hi guys, I've been searching for tutorials to better understand this, but I'm having no luck. Please forgive the lengthy explination, but I want make sure I explain myself well.

First, I'm quite new to the MVC structure, though I have been doing tutorials and learning as best I can.

I have been moving over a live site into the Zend Framework model. So far, I have all the views within views/scripts/index/example.phtml.

So therefore I'm using one IndexController and I have the code in each Action method for each page: IE public function exampleAction()

Because I didn't know how to interact with a model, I put all the methods at the bottom of the controller (a fat controller).

So basically, I had a working site by using a View and Controller and no model.

...

Now I'm trying to learn how to incorporate the Model.

So I created a View at:

view/scripts/calendar/index.phtml

I created a new Controller at:

controller/CalendarControllers.php

and a new model at:

model/Calendar.php

The problem is I think I'm not correctly communication with the model (I'm still new to OOP).

Can you look over my controller and model and tell me if you see a problem.

I'm needing to return an array from runCalendarScript(), but I'm not sure if I can return an array into the object like I'm trying to? I don't really understand how to "run" the runCalendarScript() from the controller?

Thanks for any help! I'm stripping out most of the guts of the methods for the sake of brevity:

controller:

<?php

class CalendarController extends Zend_Controller_Action
{

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

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

model:

   <?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;
 }
    }

Edit: sorry-I don't know why my formatting on the code keeps looking so ugly...

+2  A: 

Joel, So you're putting the entire model object into a variable called $finishedFeedArray, that's going to get confusing (it's not an array, it's an object).

I think that's where your problem is. You're then trying to give this variable to your view, I assume to show values in your view. In your view script any attempt to treat this variable like an array is going to cause problems.

Try this:

class CalendarController extends Zend_Controller_Action
{

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

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

There's a minor style issue there... I wouldn't name a public function with an underscore as the first character. Otherwise, this change should get at least one kink out of your code.

Erik Mitchell
Awesome! Thanks so much-that really taught me a big lesson in how this all fits together as well!
Joel