Search code examples
phpzend-frameworkzend-view

zend framework cannot find helper view file. Get 'Plugin by name was not found' error


I am trying to simply use a custom view helper that is located in /library/my/view/helpers/friends.php

I have this in the application.ini:

resources.view.helperPath.My_View_Helper = "/my/view/helpers"

This is the helper class:

class My_View_Helper_Friends extends Zend_View_Helper_Abstract {
    public function friends() {
        $str = "hello world";
        return $str;
    }
}

This is in the view file:

<?php echo $this->friends(); ?>

I get an error on this line saying it can't find the plugin in a path that it is already in.

The error:

Plugin by name 'Friends' was not found in the registry; used paths: My_View_Helper_: /My/View/Helpers/ Zend_View_Helper_: Zend/View/Helper/;C:/http/xampplite/htdocs/zf-tutorial/application/views\helpers/

Looks like its using the right path and the file is there. I don't understand why it can't find it?


Solution

  • I believe the problem is that the incorrect path is being used.

    ...used paths: My_View_Helper_: /My/View/Helpers/

    Note how the path is /My/View/Helpers. It is using an absolute path. The other issue is that the folder should be named Helper instead of helpers.

    Then change the config line in your application.ini to this:

    resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/../library/my/view/helper"
    

    and make sure your class is called My_View_Helper_Friends and the file is named Friends.php. Case matters. The directory should really be called My/View/Helper with caps.

    EDIT: Assuming library is in your include_path, you could also use the line:

    resources.view.helperPath.My_View_Helper = "My/View/Helper"
    

    Notice how it doesn't have the leading /. This will search all locations in your include_path for a folder My/View/Helper.