引用:http://ruben.savanne.be/articles/integrating-zend-framework-and-doctrine
最近做个外包项目,主要是封装了zendframework并采用doctrine作为orm解决方案,项目没有成形的结构文档,没有需求,而且工期紧,沟通困难,只能一步一步从头整理,自行搭建产品架构,自己的linux服务器跑起来声音太大,决定在windows上搞套试用。
下载地址:
我采用的是svn下载方式:
安装svn到D:/subversion 在本地建立D:/doctrine目录,下载版本到本地的D:/doctrine
D:/subversion/bin>svn co http://svn.doctrine-project.org/branches/1.2 D:/doctrine
我下载的是1.9
ZendFramework有自己的Zend_Db抽象类,Zend_Db类十分接近底层数据库,写sql的时候也需要写个个类似select 之类的语句,而doctrine更接近于面向对象。因此采用doctrine替代了ZendFramework的zend_Db类.
整合前需要先建立目录.目录结构如下:(|- 代表一级)
application
|-config
|-controllers
|-doctrine
|-|-data
|-|-|-fixtures
|-|-|-sql
|-|-migrations
|-|-schema
|-library
|-|-Doctrine
|-|-ZendFramework
|-models
|-|-generated
|-public
|-scripts
|-views
|-|-scripts
|-|-|-index
之前有做过zend framewok 项目的将比较熟悉此结构,下列的路径与zf开发略有不同
application/doctrine/:此目录包含所有doctrine生成的数据文件,像sql语句,yaml模板,迁移数据等.
application/models/:Doctrine会自动生成model文件到此目录.在zd中十分易用.
library/:zf的library与Doctrine的library
scripts/:命令行引用存储在此处
关于library的结构,如下图所示:
library
|-Doctrine
|-|-Doctrine.php
|-|-Doctrine
|-ZendFramework
|-|-library
|-|-Zend
Apache虚拟路径配置:文件尾加入以下代码(我本地装application布署在D:/apache/htdocs/application)
入口文件:
Zend Framework中我们必须定义一入口文件.在此处也同样.先建立index.php与.htaccess文件.
public/index.php
public/.htaccess
真正的入口文件存储在global.php中,之所以这样设计,是因为bootstrap.php可用于处理客户端请求,而global.php页中还存在用于Doctrine命令行的脚本
脚本生成文件
scripts/doctrine-cli
定义数据库模型,关于yaml相关的知识,可去官方网站http://yaml.org/spec/1.2/spec.html上查看
application/doctrine/schema/schema.yml
控制器文件
application/controllers/IndexController.php
视图文件
application/views/scripts/index/index.phtml
执行Doctrine命令行:
Linux中(注意文件的权限问题,防止无法生成文件)
windows平台下:
进入php.exe所在路径,我的php放在c:/php下
脚本命令执行页在D:/apache/htdocs/application/scripts/下,文件名为doctrine-cli
运行
C:/php>php D:/apache/htdocs/application/scripts/doctrine-cli
测试通过即可执行
C:/php>php D:/apache/htdocs/application/scripts/doctrine-cli generate-models-yaml
执行成功后,可以在
D:/apache/htdocs/application/models下看到Message.php
D:/apache/htdocs/application/models/generated下看到BaseMessage.php
以上的文件为Doctrine命令行自动生成的model文件
下面的命令行可根据yml生成建库脚本
C:/php>php D:/apache/htdocs/application/scripts/doctrine-cli generate-sql
执行成功可在D:/apache/htdocs/application/doctrine/data/sql文件夹下看到schema.sql文件
C:/php>php D:/apache/htdocs/application/scripts/doctrine-cli create-tables
执行成功将在当前连接的数据库中创建名为message的数据表
更多的指令请参考Doctrine Api
完成上述内容后可看到界面(csdn不支持贴图):
此时可进一步加入数据处理内容:
修改数据application/controllers/IndexController.php
修改视图文件application/views/scripts/index/index.phtml
效果:
使用Pgsql在windows中需要注意的事项
执行doctrine-cli create-tables 不成功
1.修改php.ini文件时,需要修改run (windows系统目录)php.ini下的参数与php自身文件路径下的php.ini 将
extension=php_pdo_pgsql.dll的注释去掉(两个文件都要去掉)
2.同时,将
PostgreSQL/bin下的dll复制php文件夹中或是设置为环境变量,本文的程序运行时提示
没有找到 LIBPQ.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
没有找到 libintl-8.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
没有找到 libiconv-2.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
…
采用复制文件方式进行的
将PostgreSQL/bin文件夹 下的
gssapi32.dll
k5sprt32.dll
comerr32.dll
libiconv-2.dll
libintl-8.dll
libpq.dll
krb5_32.dll
文件复制到c:/php下
本文详细介绍如何在Zend Framework中整合Doctrine ORM,包括目录结构、配置文件、模型生成及数据库操作等内容。
1639





