I'm assuming this would work from the layout as easily as the view script? Thanks for you input,I'm learning a lot!
On Mar 14, 2009 2:30 PM, "Matthew Weier O'Phinney" <[email protected]> wrote: -- Vincent de Lau <[email protected]> wrote (on Saturday, 14 March 2009, 12:52 PM +0100): > I've noticed the perfomance hit on using Zend_View_Helper_Action, but don't > know what a better a... Basically, using action() is akin to using your controllers as models, which breaks several important principles of encapsulation. The mantra of "use view helpers" stems from the fact that in MVC, views are allowed to communicate with models in order to fetch content to render. The goal, then, is to move all your business logic into models, and then write view helpers that access these models (and, optionally, format the information for rendering). As an example, consider this view helper: class My_View_Helper_RecentEntries extends Zend_View_Helper_Abstract { public $entryTemplate = '<li><a href="%s">%s</a></li>'; public function recentEntries() { $model = $this->view->entriesModel; $recent = $model->fetchRecent(); $markup = '<ul class="recent-entries">'; foreach ($recent as $entry) { $url = $this->view->url(array( 'controller' => 'articles', 'action' => 'view', 'id' => $entry->id, ), 'default', true ); $markup .= sprintf( $this->entryTemplate, $url, $this->view->escape($entry->title) ); } $markup .= '</ul>'; return $markup; } } In this case, we're pulling from a model we've injected into the view, and then creating an unordered list which we return. In your view script, you then simply echo the results: <?php echo $this->recentEnties() ?> and that's it. This tactic provides better encapsulation, provides behavior that is easily testable, and is much more performant as there is no need to lookup the controller and dispatch it. Your suggestion that if performance is an issue with action(), effort might go into improving the dispatcher or creating a lightweight version makes sense in theory... but to do so actually exposes an important point: modifying how the dispatch sequence works would actually potentially break action(). Ironically, the method of using view helpers instead of action() makes it *easier* to replace elements of Zend_Controller with your own implementations, as you no longer need to worry that changing the implementation will break the functionality. > > -----Original Message----- > > From: keith Pope [mailto: [email protected]] > > Sent: Sa... -- Matthew Weier O'Phinney Software Architect | [email protected] Zend Framework | http://framework.zend.com/
