Problem With View Helpers
        Posted  
        
            by Richard Knop
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Richard Knop
        
        
        
        Published on 2010-02-17T00:37:13Z
        Indexed on 
            2010/06/10
            6:52 UTC
        
        
        Read the original article
        Hit count: 344
        
zend-framework
I wrote few custom view helpers but I have a little trouble using them. If I add the helper path in controller action like this:
public function fooAction()
{
    $this->view->addHelperPath('My/View/Helper', 'My_View_Helper');
}
Then I can use the views from that path without a problem. But when I add the path in the bootstrap file like this:
protected function _initView()
{
    $this->view = new Zend_View();
    $this->view->doctype('XHTML1_STRICT');
    $this->view->headScript()->appendFile($this->view->baseUrl()
                                          . '/js/jquery-ui/jquery.js');
    $this->view->headMeta()->appendHttpEquiv('Content-Type',
                                       'text/html; charset=UTF-8');
    $this->view->headMeta()->appendHttpEquiv('Content-Style-Type',
                                             'text/css');
    $this->view->headMeta()->appendHttpEquiv('Content-Language', 'sk');
    $this->view->headLink()->appendStylesheet($this->view->baseUrl()
                                              . '/css/reset.css');
    $this->view->addHelperPath('My/View/Helper', 'My_View_Helper');
}
Then the view helpers don't work. Why is that? It's too troublesome to add the path in every controller action. Here is an example of how my custom view helpers look:
class My_View_Helper_FooBar
{
    public function fooBar() {
        return 'hello world';
    }
}
I use them like this in views:
<?php echo $this->fooBar(); ?>
Should I post my whole bootstrap file?
UPDATE:
Added complete bootstrap file just in case:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initFrontController()
    {
        $this->frontController = Zend_Controller_Front::getInstance();
        $this->frontController->addModuleDirectory(APPLICATION_PATH
                                                   . '/modules');
        Zend_Controller_Action_HelperBroker::addPath(
            'My/Controller/Action/Helper',
            'My_Controller_Action_Helper'
        );
        $this->frontController->registerPlugin(new My_Controller_Plugin_Auth());
        $this->frontController->setBaseUrl('/');
    }
    protected function _initView()
    {
        $this->view = new Zend_View();
        $this->view->doctype('XHTML1_STRICT');
        $this->view->headScript()->appendFile($this->view->baseUrl()
                                              . '/js/jquery-ui/jquery.js');
        $this->view->headMeta()->appendHttpEquiv('Content-Type',
                                           'text/html; charset=UTF-8');
        $this->view->headMeta()->appendHttpEquiv('Content-Style-Type',
                                                 'text/css');
        $this->view->headMeta()->appendHttpEquiv('Content-Language', 'sk');
        $this->view->headLink()->appendStylesheet($this->view->baseUrl()
                                                  . '/css/reset.css');
        $this->view->addHelperPath('My/View/Helper', 'My_View_Helper');
    }
    protected function _initDb()
    {
        $this->configuration = new Zend_Config_Ini(APPLICATION_PATH
                                                   . '/configs/application.ini',
                                                   APPLICATION_ENVIRONMENT);
        $this->dbAdapter = Zend_Db::factory($this->configuration->database);
        Zend_Db_Table_Abstract::setDefaultAdapter($this->dbAdapter);
        $stmt = new Zend_Db_Statement_Pdo($this->dbAdapter,
                                          "SET NAMES 'utf8'");
        $stmt->execute();
    }
    protected function _initAuth()
    {
        $this->auth = Zend_Auth::getInstance();
    }
    protected function _initCache()
    {
        $frontend= array('lifetime' => 7200,
                         'automatic_serialization' => true);
        $backend= array('cache_dir' => 'cache');
        $this->cache = Zend_Cache::factory('core',
                                           'File',
                                           $frontend,
                                           $backend);
    }
    public function _initTranslate()
    {
        $this->translate = new Zend_Translate('Array',
                                              BASE_PATH . '/languages/Slovak.php',
                                              'sk_SK');
        $this->translate->setLocale('sk_SK');
    }
    protected function _initRegistry()
    {
        $this->registry = Zend_Registry::getInstance();
        $this->registry->configuration = $this->configuration;
        $this->registry->dbAdapter = $this->dbAdapter;
        $this->registry->auth = $this->auth;
        $this->registry->cache = $this->cache;
        $this->registry->Zend_Translate = $this->translate;
    }
    protected function _initUnset()
    {
        unset($this->frontController,
              $this->view,
              $this->configuration,
              $this->dbAdapter,
              $this->auth,
              $this->cache,
              $this->translate,
              $this->registry);
    }
    protected function _initGetRidOfMagicQuotes()
    {
        if (get_magic_quotes_gpc()) {
            function stripslashes_deep($value) {
                $value = is_array($value) ?
                         array_map('stripslashes_deep', $value) :
                         stripslashes($value);
                return $value;
            }
            $_POST = array_map('stripslashes_deep', $_POST);
            $_GET = array_map('stripslashes_deep', $_GET);
            $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
            $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
        }
    }
    public function run()
    {
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->dispatch();
    }
}
© Stack Overflow or respective owner