Zend 框架和 WordPress 集成

Posted

技术标签:

【中文标题】Zend 框架和 WordPress 集成【英文标题】:Zend Framework and Wordpress Integration 【发布时间】:2011-04-17 07:56:36 【问题描述】:

我们在 ourdomain.com 上托管了一个现有 Zend Framework 站点,在 blog.ourdomain.com 上托管了一个 wordpress 博客

我们想将博客迁移到位于 ourdomain.com/blog 的站点中 - 但我似乎已经用 Google 搜索到了天涯海角,无法找到如何操作。我尝试了各种 .htaccess 的东西,设置博客控制器并包括一些 wordpress 文件等 - 但无济于事。

有人有什么想法吗?

虚拟主机设置:

ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/Users/bradyeager/Sites/TWPZend/public"
ServerName twps
ErrorLog "logs/twps-error-log"
CustomLog "logs/twps-access_log" common

选项索引 FollowSymLinks

AllowOverride All

Order allow,deny
Allow from all

【问题讨论】:

怎么了?另外,您能否发布用于主站点和 WordPress 博客的 .htaccess 文件? 首先我的 httpd.conf 中有一个别名: Alias /blog/ "/users/me/blog" 然后我只有标准的 Zend .htaccess SetEnv APPLICATION_ENV development RewriteEngine On RewriteCond %REQUEST_FILENAME -s [OR] RewriteCond %REQUEST_FILENAME -l [OR] RewriteCond %REQUEST_FILENAME -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] 但我有不知道为什么 /blog/ 别名不会访问任何子目录。 /blog/ 工作正常 - /blog/post/whatever 给 zend “无效的控制器博客” 也许您需要添加与那些 Wordpress 页面对应的 ZF 路由?请参阅下面的答案。 【参考方案1】:

要将 Wordpress 迁移到 ZF,您可以使用 wploader。 当我使用 wordpress 启用多个站点时,这对我有用。 您可以在 wordpress 文件中使用所有 ZF 控制器对象。 您的 wordpress 不需要任何 hack,因此您可以轻松升级或更新您的 wordpress 版本。

【讨论】:

【参考方案2】:

我编写了一个名为 Vulnero 的开源库,可以解决您的问题,它允许您在 WordPress 中运行 Zend Framework 应用程序。您的路线由您的应用程序处理,其他一切都交给 WordPress。如果您愿意,甚至可以在您的 WordPress 模板中呈现您的视图。集成身份验证、数据库连接等所有内容。源代码在 GitHub 上,或者您可以阅读 http://www.vulnero.com/ 的文档。

【讨论】:

虽然这可能对其他问题有所帮助,但在这里完全没用。这个问题是关于.htaccess 中的路由请求。两年多前有人问过并回答过。您的问题没有增加任何内容,看起来只不过是一个广告。 不太确定你怎么觉得它毫无价值,因为在他的 ZF 应用程序和他的 WP 安装之间路由请求正是我编写该项目的目的。【参考方案3】:

查看 Jason 提供的正确答案。只需确保您的 wordpress .htacess 文件正在重写为正确的 index.php 默认情况下,它将重写回属于 Zend 的基本 index.php。我的解决方案是将 Wordpress 的 .htaccess RewriteBase 更改为 /blog 而不是 /

【讨论】:

【参考方案4】:

其实我经常使用这个配置,我就是这样做的:

 /application
 /library
     /Zend 
     /wordpress ( symlink to my wordpress folder )
 /public
     index.php ( i add wordpress & the zend folder to my include path )

考虑到过程中包含的所有不必要的东西,诚然有点残酷的解决方案......

编辑:

// 定义应用程序目录的路径 定义('APPLICATION_PATH') ||定义('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // 定义应用环境 定义('APPLICATION_ENV') ||定义('APPLICATION_ENV',(getenv('APPLICATION_ENV')?getenv('APPLICATION_ENV'):'生产')); // 确保 library/ 在 include_path 上 set_include_path(implode(PATH_SEPARATOR, array( 真实路径(APPLICATION_PATH . '/../library'), 真实路径(APPLICATION_PATH。'/../library/wordpress'), get_include_path(), ))); //获取wordpress环境 定义('WP_USE_THEMES',假); 需要一次'wp-blog-header.php'; /** Zend_Application */ require_once 'Zend/Application.php'; // 创建应用程序,引导并运行 $application = 新 Zend_Application( APPLICATION_ENV, APPLICATION_PATH 。 '/configs/application.ini' ); $应用程序->引导程序() ->运行();

【讨论】:

你能把你的代码贴在包含路径中的wordpress文件夹上吗?我包含了整个“库”文件夹 @Paztrick:是的,这有点残酷——这并不是说我自己没有做过。 ;-) 特别是如果 WP db 访问是通过 mysql_xxx() 调用,而 ZF db 访问是通过 PDO 之类的。然后单个页面请求可以创建两个不同的数据库连接,可能是同一个数据库。见***.com/questions/2316413/… 好的,所以所有这些都包括在内,但我仍然不知道这应该如何工作。然后你会为你的博客添加控制器吗?一切仍在通过 Zend App 进行路由,并引发 Invalid Controller (blog) 错误 使用此解决方案,您需要添加控制器,这不是您博客的重定向,这是一个集成,这意味着您可以访问所有 Wordpress 功能,您现在可以集成其中的内容通过调用控制器中的 Wordpress 函数来创建您的主站点。【参考方案5】:

通过修改您的 .htaccess 文件以不将任何以 /blog 开头的内容发送到 ZF 应用程序来完成此操作,最有效和最简单的方法 - 只需将其传递给 Wordpress。当然,Wordpress 必须安装在您的文档根目录中,才能正常工作。

一个例子:

RewriteCond %REQUEST_FILENAME -s [OR]
RewriteCond %REQUEST_FILENAME -l [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^blog - [NC,L]

RewriteRule ^.*$ index.php [NC,L]

所有关于在您的 ZF 应用程序中创建自定义控制器、操作和路由,然后通过您的应用程序传递给 Wordpress 的所有这些废话都是绝对荒谬的。您会执行应用程序引擎的完整调度周期,只是为了转发到另一个应用程序?

【讨论】:

这终于是我要去的地方,但仍然无济于事。当我有一个必须运行 Zend 框架的 index.php 时,这应该如何工作。我现在将尝试在 public/blog 中安装 wordpress 并将最后一行更改为 blog/index.php 忽略我最后的评论。我完全删除了别名并将 wordpress 安装放在公共/博客中,并使用您的确切 .htaccess - 但仍然使用像 site/blog/2010/09/23/destination-honeymoon-to-goa-india 这样的网址,我得到无效的控制器。为什么上面没有忽略这个 URI - 它仍然重写它以由 zend 处理 我已经更改了我的示例,以便在您的目录树中安装应用程序时更加宽容。在它假定域的根之前。我已经对此进行了测试,并且效果很好。 我很感激,但仍然没有运气。我在原始帖子中发布了我的 VirtualHost 设置 - 目录指令中是否有某些内容可能不允许这样做。就像它根本不处理 ^blog 或 !^blog 规则一样。它提供主页只是因为 /blog/ 是一个目录:RewriteCond %REQUEST_FILENAME -d 您的应用的基本 URL 是什么?它在您的域的根目录上吗?如果没有,您的 RewriteBase 指令是否设置正确?【参考方案6】:

关于将非 ZF 站点迁移到 ZF 的最佳文章之一来自 Chris Abernethy。

和你一样,他为那些非 ZF 处理的脚本设置了一个特殊的控制器。然而,他(最终)设置了对应于那些非 ZF 页面的 ZF 路由,而不是使用外部 .htaccess。

可能不适用于您的案例,因为您的示例涉及 子域,而他的示例涉及 same 域上的页面。但是里面有一些好的想法可能会有所帮助。

【讨论】:

RewriteEngine On RewriteCond %REQUEST_URI ^/blog RewriteRule ^.*$ - [NC,L] RewriteCond %REQUEST_FILENAME !-s RewriteCond %REQUEST_FILENAME !-l RewriteCond %REQUEST_FILENAME !-d RewriteCond %REQUEST_URI !^/blog RewriteRule ^.*$ index.php [NC,L]

以上是关于Zend 框架和 WordPress 集成的主要内容,如果未能解决你的问题,请参考以下文章

使用 zend 框架安装和使用学说

在大型项目中使用 zend 框架和 git

zend框架2流程图

需要关于删除 zend 框架依赖的建议

Zend 框架中可以手动调度吗?

Laravel生成Word文档 - phpword