How to autoload classes in Zend Framework
I'am dabbling with the Zend framework and I have got a few things working, but some other things seem to be more of a chore to get working.
Right now I have edited my php.ini file so it goes to the Zend path, that works fine however my question is to c开发者_StackOverflow社区reate for example a form do I really need to require
every path.
For example:
require_once('Zend/Form.php');
require_once('Zend/Form/Element.php');
require_once('Zend/Form/Exception.php');
require_once('Zend/Form/Element/Text.php');
Is there something I'm missing?
Regards
You are missing everything about Zend_Autoloader. 1 sec and i'll fetch some links and examples.
http://zendframework.com/manual/1.11/en/learning.autoloading.usage.html
OK so you generally configure your autoloader in your Application Bootstrap
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDoctype()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
protected function _initAutoload()
{
$auto_loader = Zend_Loader_Autoloader::getInstance();
$resource_loader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
'resourceTypes' => array(
'my' => array(
'path' => '/../library/My/',
'namespace' => 'My_'
),
)
)
);
return $auto_loader;
}
... MORE FUNCTIONS
}
So that set up the base autoloader, and an autoloader for another Library that I wrote (mostly custom validators and such, called "My", that exists next to the Zend Libraries
Then in each of your Modules, have a bootstrap file:
<?php
class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
It doesn't have to have anything in it, the parent module bootstrapper sets up autoloading for that module
one last thing, in your webroot, there is a index.php file that passes all requests to your application. Make sure that you are adding the library to the php include path.
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
You should use the autoloader. You are free to use each component individually. You aren't forced to use the entire MVC dispatch flow of Zend Framework, however if you do, then you should configure your own custom namespaces and set up the autoloader.
When you do that, anytime you use a class that does not already exist, it will require it for you.
Here are the docs:
http://framework.zend.com/manual/en/zend.loader.autoloader.html
All you need to do is set up the path to your ZF library.
精彩评论