[Zend Framework] Zend_Loader: 独自ライブラリをオートロードする
独自に作成したフィルターやバリデートをオートロードしてみます。
[markdown]
例えば、このような形で配置されているとします。
“`
./library
├── My
│ ├── Filter
│ │ └── AllowTag.php
│ ├── Form
│ │ └── Element
│ │ └── Date.php
│ └── Validate
│ ├── CompareDate.php
│ ├── Date.php
│ ├── DateCompare.php
│ ├── GreaterThan.php
│ └── LessThan.php
“`
コントローラでこのように require_once されていました。
“`php:application/controllers/IndexController.php
* [bootstrap – How to indicate zend framework where my custom classes are – Stack Overflow](http://stackoverflow.com/questions/2495606/how-to-indicate-zend-framework-where-my-custom-classes-are)
> * [Resource Autoloaders – Zend_Loader – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.loader.autoloader-resource.html)
Zend_Loader_Autoloader に関する設定になるのだと思います。
## 標準のマッピング
ちなみに推奨ディレクトリ構造に従って、このようにマッピングされているそうです。
“`
forms/ => Form
models/ => Model
DbTable/ => Model_DbTable
mappers/ => Model_Mapper
plugins/ => Plugin
services/ => Service
views/
helpers => View_Helper
filters => View_Filter
“`
> * [Resource Autoloaders – Zend_Loader – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.loader.autoloader-resource.html#zend.loader.autoloader-resource.module)
> * [推奨されるプロジェクト・ディレクトリ構造 – Zend Framework MVC アプリケーションのために推奨されるプロジェクト構造 – Zend Framework](http://framework.zend.com/manual/1.12/ja/project-structure.project.html)
この設定に沿って、下記を探してくれたのだと思います。
> * [Zend_View – 独自のビューヘルパーを作成する | deadwood](https://www.d-wood.com/blog/2013/07/02_4201.html)
> * [Zend_View – 独自のビューフィルターを作成する | deadwood](https://www.d-wood.com/blog/2013/07/02_4208.html)
## 補遺
require_once がコントローラに含まれていると、zf.sh 利用時に下記のようなエラーにより実行されませんでした。
“`
% zf create action tableText Index
Note: PHPUnit is required in order to generate controller test stubs.
Creating an action named tableText inside controller at /Users/***/projects/sample/application/controllers/IndexController.php
PHP Warning: require_once(My/Filter/AllowTag.php): failed to open stream: No such file or directory in /Users/***/projects/sample/application/controllers/IndexController.php on line 3
Warning: require_once(My/Filter/AllowTag.php): failed to open stream: No such file or directory in /Users/***/projects/sample/application/controllers/IndexController.php on line 3
PHP Fatal error: require_once(): Failed opening required ‘My/Filter/AllowTag.php’ (include_path=’/Users/***/bin/:/Applications/NetBeans/NetBeans 7.3.1.app/Contents/Resources/NetBeans/php/zend:.:/usr/local/zend/share/ZendFramework/library:/usr/local/zend/share/pear’) in /Users/***/projects/sample/application/controllers/IndexController.php on line 3
Fatal error: require_once(): Failed opening required ‘My/Filter/AllowTag.php’ (include_path=’/Users/***/bin/:/Applications/NetBeans/NetBeans 7.3.1.app/Contents/Resources/NetBeans/php/zend:.:/usr/local/zend/share/ZendFramework/library:/usr/local/zend/share/pear’) in /Users/***/projects/sample/application/controllers/IndexController.php on line 3
“`
autoload することによって、require_once を削除できるので、問題なく実行することができました。
“`
% zf create action textTable Index
Note: PHPUnit is required in order to generate controller test stubs.
Creating an action named textTable inside controller at /Users/***/projects/sample/application/controllers/IndexController.php
Updating project profile ‘/Users/***/projects/sample/.zfproject.xml’
Creating a view script for the textTable action method at /Users/***/projects/sample/application/views/scripts/index/text-table.phtml
Updating project profile ‘/Users/***/projects/sample/.zfproject.xml’
“`
[/markdown]