Reputation: 4610
I have a little strange situation. I have view, from this view I execute my view helper "convertingText". This view helper (FR_View_Helper_ConvertingText.php) are locate in folder FR/View/Helper
No problem, helper works.
I created 404 page. This is not simple html page. This page are similar to main page - we output some items from database. I copied part of view in new view and I have problem convertingText view helper aren't loaded.
Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'ConvertingText' in /var/www/framework/zend/library/Zend/Controller/Plugin/Broker.php on line 336
Zend_Loader_PluginLoader_Exception: Plugin by name 'ConvertingText' was not found in the registry; used paths:
Zend_View_Helper_: Zend/View/Helper/:../application/views/helpers/:/var/www/current/application/modules/default/views/helpers/ in /var/www/framework/zend/library/Zend/Loader/PluginLoader.php on line 422
On Bootstrap.php we have lines with adding folder for loading helper
$view->addHelperPath("FR/View/Helper", "FR_View_Helper");
I debugged and output paths from method load class Zend_Loader_PluginLoader And on main page I have different paths (for loading plugins) from paths on 404 page.
On main page I have these paths
/var/www/current/modules/movies/views/helpers/ConvertingText.php
FR/View/Helper/ConvertingText.php
On 404 page I have these paths
/var/www/current/application/modules/movies/views/helpers/ConvertingText.php
/var/www/current/application/modules/default/views/helpers/ConvertingText.php
../application/views/helpers/ConvertingText.php
Zend/View/Helper/ConvertingText.php
And one strange issue, if I add line
$view->convertingText('', '');
after line
$view->addHelperPath("FR/View/Helper", "FR_View_Helper");
in Bootstrap.php - view helper convertingText works on 404 page.
Why is so behaviour ?
protected function _initView()
{
$view = new Zend_View();
$view->addHelperPath("ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper");
$view->addHelperPath("DR/View/Helper", "DR_View_Helper");
$view->addHelperPath("FR/View/Helper", "FR_View_Helper");
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$viewRenderer->setViewScriptPathSpec(":controller/:action.:suffix");
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
Zend_View_Helper_PaginationControl::setDefaultViewPartial(array('pagination.phtml','default'));
Zend_Registry::set('view', $view);
return $view;
}
Upvotes: 1
Views: 288
Reputation: 4610
I found the problem, why view helper was unaccesible.
Paths to helpers are overrided. I found this code in one Plugin.
$this->view = Zend_Registry::get('view');
$this->view->setBasePath('../application/views/');
Executing method setBasePath overrided paths to my helpers.
Upvotes: 0
Reputation: 5166
Try this I think a trailing slash(/) and underscore(_) may be creating problem
protected function _initView()
{
$view = new Zend_View();
$view->addHelperPath("ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper");
$view->addHelperPath($path . "/DR/View/Helper/", "DR_View_Helper_");//Add $path
$view->addHelperPath($path . "/FR/View/Helper/", "FR_View_Helper_");//Add $path
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$viewRenderer->setViewScriptPathSpec(":controller/:action.:suffix");
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
Zend_View_Helper_PaginationControl::setDefaultViewPartial(array('pagination.phtml','default'));
Zend_Registry::set('view', $view);
return $view;
}
Upvotes: 0
Reputation: 33148
The different paths are probably dependent on which module you're in. You should use an absolute path for the view helper path, then you won't have this problem:
$view->addHelperPath(APPLICATION_PATH."/../FR/View/Helper", "FR_View_Helper");
(update as required.)
ZF reuses helper classes it's already loaded, so $view->convertingText('', '');
fixes it because then the helper is loaded before the module changes.
Edit: Try this for your init view method:
protected function _initView()
{
$view = new Zend_View();
$view->addHelperPath("ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper");
$view->addHelperPath(APPLICATION_PATH."/../DR/View/Helper", "DR_View_Helper");
$view->addHelperPath(APPLICATION_PATH."/../FR/View/Helper", "FR_View_Helper");
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewRenderer->setViewScriptPathSpec(":controller/:action.:suffix");
$stack = Zend_Controller_Action_HelperBroker::getStack();
$stack->push($viewRenderer);
Zend_View_Helper_PaginationControl::setDefaultViewPartial(array('pagination.phtml','default'));
Zend_Registry::set('view', $view);
return $view;
}
Upvotes: 1