Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What directory is used for Zend plugins?

Let's say I have the following in my ini file:

resources.frontController.plugins.auth = AuthPlugin

Where should the AuthPlugin class be placed? Let's say I would like it under controllers/plugins.

UPDATE:

Based on the suggestions below I am still having trouble. Let me be exact in what I currently have:

1) main part of application.ini

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.view[] =
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.plugins.authplugin.class = "AuthPlugin"

2) my Bootstrap.php has nothing (I had lots of things in there, but still get the error with nothing):

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

3) I have an AuthPlugin.php class in application/plugins directory

class AuthPlugin extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
        { 
           // code here
        }
}

I get the following error:

Fatal error: Class 'AuthPlugin' not found in C:\[my dir structure here]\Application\Resource\Frontcontroller.php on line 111

I assume I'm missing something obvious here. Thanks in advance. Zend Framework 1.10

like image 936
Arthur Frankel Avatar asked Jun 25 '10 18:06

Arthur Frankel


People also ask

Is Zend framework in PHP?

Zend is an open source PHP framework. It is pure object-oriented and built around the MVC design pattern. Zend framework contains collection of PHP packages which can be used to develop web applications and services. Zend was started by Andi Gutmans and Zeev Suraski.

What is Zend used for?

Zend Framework is a collection of professional PHP packages with more than 570 million installations. It can be used to develop web applications and services using PHP 5.6+, and provides 100% object-oriented code using a broad spectrum of language features.

How do I make a Zend project?

Open a terminal (in Windows, Start -> Run, and then use cmd). Navigate to a directory where you would like to start a project. Then, use the path to the appropriate script, and execute one of the following: % zf create project quickstart.


1 Answers

This is how I register a plugin named Foo_Plugin_SuperDuperPlugin in my application config:

resources.frontController.plugins.superduperplugin.class = "Foo_Plugin_SuperDuperPlugin"

The plugin is located at
APPLICATION_PATH/plugins/Foo_Plugin_SuperDuperPlugin.php and is autoloaded from there because the Resource Module Autoloader automatically looks in that (recommended) location for plugin type resources. If I wanted to load the plugin from, say,
APPLICATION_PATH/controllers/plugins/Foo_Plugin_SuperDuperPlugin.php then I would register a new resource loader with the autoloader and define a type of resource named 'plugin' and the path to those plugin resources. So in my bootstrap.php

protected function _initAutoloader()
{
    $autoloader = new Zend_Loader_Autoloader_Resource(
        array(
            'basePath'      => APPLICATION_PATH,
            'namespace'     => 'Foo',
            'resourceTypes' => array(
                'plugin' => array(
                    'path'      => 'controllers/plugins',
                    'namespace' => 'Plugin',
                )
            )
        )
    );
}

and then I need to ensure that this method is bootstrapped before the SuperDuperPlugin is registered (which, in this example, happens when the application config is read resources.frontcontroller.plugins.superduperplugin.class = ...). This can be achieved by placing the _initAutoloader method at the top of the bootstrap.php or by calling $this->bootstrap('autoLoader'); from any other _init method, before the frontController resource is initialised.

UPDATED: Try adding this to your bootstrap:

protected function _initAutoloader()
{
    $autoloader = new Zend_Loader_Autoloader_Resource(
        array(
            'basePath'      => APPLICATION_PATH,
            'resourceTypes' => array(
                'plugin' => array(
                    'path'      => 'controllers/plugins',
                    'namespace' => '',
                )
            )
        )
    );
}

and maybe even leave off the namespace. Or: add appnamespace = "Foo" to your config and rename the class to Foo_Plugin_AuthPlugin.

like image 165
jah Avatar answered Oct 27 '22 13:10

jah