Mat*_*att 7 php wordpress symfony
我一直在研究它并试一试,但我有点难过.
我想在WordPress中设置一个网站,这对另一个与我合作的人很有帮助.该网站将宣传我们的产品并提供信息.然后用户可以通过一系列表单进行注册.我想在Symfony2中编写这个自定义部分(表单等),因为它不需要绑定到WordPress,并且在用户注册后它将具有可重用的Doctrine2实体来显示数据(无论如何都在WordPress之外显示) ).
但是,在设计方面,我们希望整个过程不间断,并具有相同的外观和感觉.因此,表单实际上应该在WordPress页面中呈现.我们使用的是自定义的非免费主题,我讨厌将一堆WordPress CSS和标题复制粘贴到Symfony视图中.
理想情况下,我想在WordPress中定义可以呈现Symfony2操作的页面.因此,操作本身可能会显示和处理表单(这应该独立于WordPress在http://example.com/app.php/signup上工作),但它们通常应该显示在WordPress站点中(例如在页面中http://example.com/index.php?page_id=2或永久链接).
我一直在研究LowPress作为一种集成方式(http://www.lowpress.com/),但它通过完全删除WordPress主题并用Twig主题替换它来实现比我想要的更多.我试图从中借用一些想法,所以现在我web在Symfony项目的文件夹中有WordPress ,这在我的wp-config.php:
// ...code omitted
define('WP_DEBUG', true);
define('SYMFONY_DIR', __DIR__.'/../app/');
require_once SYMFONY_DIR.'/bootstrap.php.cache';
require_once SYMFONY_DIR.'/AppKernel.php';
//require_once SYMFONY_DIR.'/AppCache.php';
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Request;
$kernel = new AppKernel((WP_DEBUG) ? 'dev' : 'prod', WP_DEBUG);
$kernel->loadClassCache();
$kernel->boot();
$GLOBALS['sf2_kernel'] = $kernel;
// save request before WordPress messes with it
$GLOBALS['sf2_request'] = Request::createFromGlobals();
$doctrine = $kernel->getContainer()->get('doctrine');
$conn = $doctrine->getConnection($doctrine->getDefaultConnectionName());
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $conn->getDatabase());
/** MySQL database username */
define('DB_USER', $conn->getUsername());
/** MySQL database password */
define('DB_PASSWORD', $conn->getPassword());
/** MySQL hostname */
define('DB_HOST', $conn->getHost());
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
// ...code omitted
Run Code Online (Sandbox Code Playgroud)
所以我现在所拥有的只是parameters.iniSymfony中的共享数据库配置.接下来我一直在尝试创建一个使用短代码的简单插件,这样我就可以在WordPress页面中呈现Symfony2动作.这是我迄今为止的一个想法(它取决于上述引导并且它不完整):
use Symfony\Component\HttpFoundation\Request;
class Symfony2Page
{
public function render($atts)
{
extract(shortcode_atts(array(
'controller' => 'CroltsMainBundle:Default:index',
), $atts));
$kernel = $GLOBALS['sf2_kernel'];
$request = $GLOBALS['sf2_request'];
$request->headers->set('X-Php-Ob-Level', ob_get_level());
$attributes = array();
// @TODO fix this
$kernel->getContainer()->enterScope('request');
$kernel->getContainer()->set('request', $request, 'request');
try {
$response = $kernel->getContainer()->get('http_kernel')->render($controller, $attributes)->getContent();
} catch (\Exception $e) {
$kernel->getContainer()->leaveScope('request');
throw $e;
}
$kernel->getContainer()->leaveScope('request');
return $response;
}
}
add_shortcode('sf_action', array('Symfony2Page', 'render'));
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是我不知道如何实际渲染一些Symfony2路由,它可能有参数,当给定的$request不具备我需要的信息时.另一个问题是,如果我想要提交表单,它可能无法正常工作,因为它会将用户重定向到WordPress之外,而实际上我可能需要一系列表单,这些表单都存在于WordPress页面中.同时,我希望表单独立于WordPress,因此它们可以独立工作.
所以我想知道这是不是一个糟糕/黑客的想法,这个想法是行不通的,或者是否有某种方法让它发挥作用.
我还在考虑使用AJAX在WordPress中加载Symfony2代码(假设我的所有用户都启用了Javascript).作为后备,页面可以只转到仅限Symfony2的应用程序,而不是在WordPress页面中.会更好/更容易吗?我能看到的唯一缺点是我必须保持ajax代码与我的Symfony2代码同步.
Symfony 2 允许使用框架的一部分而不使用整体。
该表单是一个可拆卸的组件,您可以在这里找到:
遗憾的是,目前还没有太多文档,因此您必须自己发现它......
编辑:路由等也是如此。如果您希望能够使用 symfony 路由来识别路径/要做的事情,您必须包含 HttpFoundation 组件,显然还有路由。