2010-06-07 3 views
4

J'ai cherché des tutoriels pour mieux comprendre cela, mais je n'ai pas de chance. S'il vous plaît pardonnez la longue explication, mais je veux m'assurer que je m'explique bien. Premièrement, je suis relativement nouveau dans la structure MVC, même si j'ai fait des tutoriels et appris le mieux possible.Comment appeler les méthodes d'un modèle via le contrôleur? Zend Framework

J'ai migré sur un site en ligne dans le modèle Zend Framework. Jusqu'à présent, j'ai toutes les vues dans views/scripts/index/example.phtml.

Ainsi donc j'utilise un IndexController et j'ai le code dans chaque méthode d'action pour chaque page: IE public function exampleAction()

Parce que je ne savais pas comment interagir avec un modèle, je mets toutes les méthodes à le bas du contrôleur (un gros contrôleur).

Donc, fondamentalement, j'avais un site de travail en utilisant une vue et un contrôleur et aucun modèle.

...

Maintenant, je suis en train d'apprendre comment intégrer le modèle.

Je créé une Voir à:

view/scripts/calendar/index.phtml 

J'ai créé un nouveau contrôleur à:

controller/CalendarControllers.php 

et un nouveau modèle à:

model/Calendar.php 

Le problème est que je pense Je ne suis pas correctement en communication avec le modèle (je suis encore nouveau à OOP). Pouvez-vous regarder par-dessus mon contrôleur et modèle et dites-moi si vous voyez un problème.

Je dois retourner un tableau de runCalendarScript(), mais je ne suis pas sûr de pouvoir retourner un tableau dans l'objet comme j'essaie de le faire? Je ne comprends pas vraiment comment "exécuter" le runCalendarScript() à partir du contrôleur?

Merci pour toute aide! Je me déshabille sur la plupart des tripes des méthodes pour un souci de concision:

contrôleur

:

<?php 

class CalendarController extends Zend_Controller_Action 
{ 

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

    $this->view->googleArray = $finishedFeedArray; 
    } 
} 
modèle

:

<?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: désolé, je ne sais pas pourquoi ma mise en forme sur le code continue de sembler si moche ...

Répondre

2

Joel, Donc, vous mettez tout l'objet du modèle dans une variable appelée $ finishedFeedArray, cela va devenir confus (c'est pas un tableau, c'est un objet).

Je pense que c'est là que réside votre problème. Vous essayez ensuite de donner cette variable à votre vue, je suppose pour montrer des valeurs à votre avis. Dans votre script de vue, toute tentative de traiter cette variable comme un tableau va causer des problèmes.

Essayez ceci:

class CalendarController extends Zend_Controller_Action 
{ 

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

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

Il y a un problème de style mineur là ... Je ne nommerai pas une fonction publique avec un trait de soulignement comme premier caractère. Sinon, ce changement devrait vous faire perdre au moins un pli de votre code.

+0

Génial! Merci beaucoup - cela m'a vraiment appris une grande leçon dans la façon dont tout cela s'accorde bien! – Joel

Questions connexes