2
votes

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?

1
I've always had to use $this->helper() to make it work. Also my view helpers are all Zend_View_Helper_MyHelper (maybe try a rename) although I don't put them in the library, I keep them in /views/helpers to keep things simple. You didn't mention if you added the autoloaderNamespaces[] = MY_ to your application.ini. Not sure if that would be a factor or not.RockyFord
@RockyFord It may be that you always have to use $this->helper() because you are naming your classes Zend_View_Helper_XXX (if I read that correctly). Only classes officially belonging to ZF should be prefixed with Zend_ or ZendX_ (See ZF Naming Conventions). It might have to do with the autoloader looking in the Zend directories for your helper classes.drew010
@drew010 I should said $this->MyHelper() prefixing with Zend_View_Helper_XXX is the default. So I don't have to register a new helper path. They are stored in any of my /views/helpers directories. Someday I'll put them all in one place, when I cleanup the application. Also the question has been cleaned up since I posted, so my post makes less sense :)RockyFord
I have also tried putting the Friends helper in /application/views/helpers/ and still get the same error. I renamed the class to Zend_View_Helper_Friends. Do I have to include anything in the helper file?Andy N

1 Answers

2
votes

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.