fullsix / wordpress-bundle
让WordPress处理Symfony2的视图
dev-master
2013-03-16 17:26 UTC
Requires
- php: >=5.3.2
This package is not auto-updated.
Last update: 2024-09-28 14:37:54 UTC
README
这是一个正在进行中的项目
这个包尝试将WordPress与Symfony2集成,使得WordPress用于处理视图,而Symfony2用于处理控制器。
当您想在现有的WordPress网站上添加Symfony2控制器时,应使用此包,例如。这非常基础,但事实上工作得相当好,我们已经在各种WordPress实例上实现了这种机制,其中一个包含两个博客,使用多种语言(使用出色的WPML插件)。
为了在WordPress内容中解释Twig标签,需要Symfony >= 2.2。
安装
下载并安装包
将以下依赖项添加到您的项目的composer.json文件中
"require": {
# ..
"fullsix/wordpress-bundle": "dev-master"
# ..
}
在内核中注册包
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new FullSIX\Bundle\WordPressBundle(), // ... ); }
安装WordPress
在您的web目录中安装WordPress并启动其配置。
安装WordPress插件
需要一个简单的WordPress插件来解释WordPress内容中的Twig内容。从这里安装。
修改您的app_dev.php
编辑您的app_dev.php文件,并在开头添加以下行
use FullSIX\Bundle\WordPressBundle\WordPressResponse;
并在末尾替换
$kernel = new AppKernel('dev', true); $kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
为
$kernel = new AppKernel('dev', true); $kernel->loadClassCache(); global $container, $response; $request = Request::createFromGlobals(); $response = $kernel->handle($request); $container = $kernel->getContainer(); if ($response instanceof WordPressResponse) { $container->enterScope('request'); $container->set('request', $request, 'request'); $targetUrl = $response->getTargetUrl(); if (!empty($targetUrl)) { $_SERVER['REQUEST_URI'] = $targetUrl; } define('WP_USE_THEMES', true); require('./wp-blog-header.php'); } else { $response->send(); $kernel->terminate($request, $response); }
修改后,将更改复制到您的app.php文件中,并删除WordPress的index.php文件。如果您激活了WordPress的URL重写功能,可能需要注释WordPress自动修改的您的.htaccess文件中的修改。
示例Symfony2控制器
/** * @Route("/test-page/") */ public function pageAction() { return WordPressResponse::currentPage(array("var1" => "value1", "var2" => 2)); } /** * @Route("/test-form/") */ public function formAction(Request $request) { // Create form $builder = $this->createFormBuilder(); $form = $builder ->add('var1', 'text', array("label" => "Variable 1", "required" => false, "constraints" => new NotBlank())) ->add('var2', 'text', array("label" => "Variable 2", "required" => false, "constraints" => new NotBlank())) ->getForm(); $result = null; if ($request->getMethod() == 'POST') { $form->bind($request); $data = $form->getData(); $result = $data["var1"]." ".$data["var2"]; } return WordPressResponse::currentPage(array('form' => $form->createView(), "result" => $result)); }
这将创建两个路由,并将它们的视图委托给相应的WordPress页面。例如,在/test-page/ WordPress内容中,您可以有
This is my test page, with some really interesting content.
<ul>
<li>var1 = {{ var1 }}</li>
<li>var2 = {{ var2 }}</li>
</ul>
这将显示为
This is my test page, with some really interesting content.
* var1 = value1
* var2 = 2
/test-form/页面可以有以下内容
Hi,
This is my test form.
<form method="post">
{{ form_widget(form) }}
<input type="submit" value="Ok" />
</form>
{% if result is not null %}
Result: {{ result }}
{% endif %}
这将显示一个基本表单,当提交时将连接两个变量。