Zend Framework的Autoloader是一個很棒的設計,它可以自動幫你載入相關名稱的class,Zend Framework 會按照 PEAR 命名方法來載入類別(Xxx/Yyy/Zzz.php 對應 class Xxx_Yyy_Zzz 這個類別)
一般類別載入
例如:
library/Test/Hello/Morning.php
class Test_Hello_Morning { function sayMorning(){ print "Good Morning"; } }
可以在Controller中新增namespace
require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); //新增Namespace(library/Test中的class都會引入) //官網建議Namespace後要加上底線符號,避免像Testaaa/Xxx這種情形也被引入 //namespace autoloader就不需要加底線 $autoloader-> registerNamespace('Test_');
如果專案是使用ZF tools產生的話,可以直接在application/configs/application.ini中加入:
Autoloadernamespaces[] = "Test_"
Controller就可以直接使用
class IndexController extends Zend_Controller_Action { public function indexAction() { $this->_helper->viewRenderer->setNoRender(); $test = new Test_Hello_Morning(); $test -> sayMorning(); } }
資源類別載入
資源類別是指Model、Form等常用類別,在用ZF tools建立的專案中,主要由Zend_Application_Module_Autoloader處理。
在ZF tools建立的專案中,application/configs/application.ini裡預設的appnamespace是Application,所以使用zf指令建立時,會按照namespace產生,例如:
#產生class Application_Model_Haha zf create model Haha
Zend_Application_Module_Autoloader預設已經有先建立幾個預設的對應路徑(不需任何設定就會自動載入)
資源名稱 | 對應路徑 |
Model_DbTable | models/DbTable |
Model_Mapper | models/mappers |
Form | forms |
Model | models |
Plugin | plugins |
Service | services |
View_Helper | views/helpers |
View_Filter | views/filters |
如果是使用手動建立ZendFramework的目錄,就必須在public/index.php中自行設定Zend_Loader_Autoloader_Resource
$resourceLoader = new Zend_Loader_Autoloader_Resource(array( 'basePath' => APPLICATION_PATH, 'namespace' => 'Application', 'resourceTypes' => array( 'form' => array( 'path' => 'forms/', 'namespace' => 'Form', ), 'model' => array( 'path' => 'models/', 'namespace' => 'Model', ), ), ));
namespace載入
也可以使用namespace autoloader
架構
├── library │ ├── Test │ │ └── Hello │ │ └── Morning.php
Morning.php
namespace Test\Hello; class Morning { static function test() { echo '334567'; } }
Controller
$loader = Zend_Loader_Autoloader::getInstance(); $loader->registerNamespace('Test'); $auto = new Test\Hello\Morning(); echo $auto->test() . PHP_EOL;