Как я могу вызвать методы в модели через контроллер? Zend Framework - PullRequest
4 голосов
/ 07 июня 2010

Я искал учебники, чтобы лучше понять это, но мне не повезло. Пожалуйста, простите за длинное объяснение, но я хочу убедиться, что я хорошо объясню.

Во-первых, я довольно новичок в структуре MVC, хотя я делал уроки и учился как мог.

Я перешел через живой сайт в модель Zend Framework. Пока у меня есть все представления в views / scripts / index / example.phtml.

Поэтому я использую один IndexController и у меня есть код в каждом методе Action для каждой страницы: IE public function exampleAction()

Поскольку я не знал, как взаимодействовать с моделью, я поместил все методы внизу контроллера (толстый контроллер).

Таким образом, у меня был рабочий сайт с использованием View и Controller, а не модели.

...

Теперь я пытаюсь научиться включать Модель.

Итак, я создал вид по адресу:

view/scripts/calendar/index.phtml

Я создал новый контроллер по адресу:

controller/CalendarControllers.php

и новая модель по адресу:

model/Calendar.php

Проблема в том, что я не правильно общаюсь с моделью (я все еще новичок в ООП).

Можете ли вы просмотреть мой контроллер и модель и сказать мне, если вы видите проблему.

Мне нужно вернуть массив из runCalendarScript (), но я не уверен, смогу ли я вернуть массив в объект, как я пытаюсь? Я не очень понимаю, как "запустить" runCalendarScript () из контроллера?

Спасибо за любую помощь! Ради краткости я вычеркиваю большинство методов:

* +1034 * Контроллер:
<?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 Ответ

2 голосов
/ 07 июня 2010

Джоэл, Итак, вы помещаете весь объект модели в переменную с именем $ finishFeedArray, это может сбить с толку (это не массив, это объект).,Затем вы пытаетесь предоставить эту переменную вашему представлению, я предполагаю, чтобы показать значения в вашем представлении.В вашем скрипте вида любая попытка обработать эту переменную как массив вызовет проблемы.

Попробуйте это:

class CalendarController extends Zend_Controller_Action
{

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

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

Там есть небольшая проблема стиля ...Назовите публичную функцию с подчеркиванием в качестве первого символа.В противном случае это изменение должно получить как минимум один излом вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...