symfony是一款支持插件机制的php框架, 在使用symfony开发项目的时候可以很方便的从官方(http://www.symfony-project.org/plugins)下载到由其他开发者贡献出来的插件.
关于插件的使用请参考 http://www.symfony-project.org/book/1_2/17-Extending-Symfony#Plug-Ins
当使用symfony一段时间后, 我们可能有很多可以重用的代码, 为了方便以后重用, 我们可以将这些代码创建成插件, 甚至可以发布到官方的插件库中提供他人下载使用.
symfony1.2中插件位于项目根目录的plugins目录下, symfony1.2的插件的目录结构如下:
|--.LICENSE
|--.README
|--.config
|...|--.app.yml
|...|--.cache.yml
|...|--.routing.yml
|...|--.schema.yml
|...|--.security.yml
|...|--.settings.yml
|...|--.pluginNamePluginConfiguration.class.php
|...`--.view.yml
|--.doc
|--.i18n
|--.log
|--.lib
|...|--.filter
|...|--.form
|...|--.helper
|...|--.model
|...|--.task
|...|--.validator
|...`--.widget
|--.modules
|...`--.testPlugin
|.......|--.actions
|.......|...`--.actions.class.php
|.......|--.config
|.......`--.templates
|...........`--.indexSuccess.php
|--.templates
|...`--.layout.php
|--.test
`--.web
....|--.css
....|...`--.main.css
....|--.images
....|--.js
....|--.robots.txt
.....`--.uploads
........`--.assets
目录结构很清晰, 虽然目录很文件很多但都不是必须的, 你只需要编写你要扩展的那部分文件就可以了.在插件中我们可以象在项目中一样自动加载config, 编写action和template, 自动加载lib等等.
如果我们想写一个helper插件, 那么我们只要建立一个lib目录和一个/lib/helper目录, 并将helper放在helper目录下就可以使用了.
如果你要扩展一个动作, 那你只需要象平常一样修改mudules目录, 修改你要使用该动作的app的settings.yml如下:
/apps/frontend/config/settings.yml
enabled_modules: [default, pluginModuleName]
然后你就可以通过http://project/frontend_dev.php/pluginModuleName/index访问到插件中的动作了.
插件中的web目录是比较特殊的, 由于symfony独特的目录结构, 你并不可能直接访问到plugin的web目录, 在安装plugin的过程成, symfony会自动将插件中的web目录copy到项目的web目录下, 并以plugin命来重命名plugin的web目录, 所以如果你想你访问你自己编写的插件中的web目录也要将web目录copy到项目的web目录下并重新命名.