php – 如何将Symfony2操作嵌入到WordPress中?
我一直在研究它并试一试,但我有点难过.
我想在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主题替换它,确实比我想要的更多.我试图从中借用一些想法,所以现在我在Symfony项目的web文件夹中有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 SymfonyComponentEventDispatcherEvent; use SymfonyComponentHttpFoundationRequest; $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 所以我现在所拥有的是通过Symfony中的parameters.ini进行的共享数据库配置.接下来我一直在尝试制作一个使用短代码的简单插件,这样我就可以在WordPress页面中渲染Symfony2动作.这是我迄今为止的一个想法(它取决于上面的引导并且它是不完整的): use SymfonyComponentHttpFoundationRequest; 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')); 我的第一个问题是,当给定的$request没有我需要的信息时,我不知道如何实际呈现一些可能有参数的Symfony2路由.另一个问题是,如果我想要提交表单,它可能不会起作用,因为它会将用户重定向到WordPress之外,而实际上我可能需要一系列表单,这些表单都存在于WordPress页面中.同时,我希望表单独立于WordPress,因此它们可以独立工作. 所以我想知道这是不是一个坏的/ hacky想法,它不起作用,或者是否有某种方法可以使它工作. 我还在考虑使用AJAX在WordPress中加载Symfony2代码(假设我的所有用户都启用了Javascript).作为后备,页面可以只转到仅限Symfony2的应用程序,而不是在WordPress页面中.会更好/更容易吗?我能看到的唯一缺点是我必须让ajax代码与我的Symfony2代码保持同步.
Symfony 2允许使用框架的一部分而不使用整体.
表单是一个可拆卸的组件,您可以在此处找到: http://symfony.com/components 遗憾的是,还没有太多的文档,因此你必须自己发现它… 编辑:同样伴随着路由等.如果你想能够使用symfony路由来识别要做的路径/事情,你必须包括HttpFoundation组件,显然是路由. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |