我一直在研究它,並試用它,但我有點難住。如何將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主題替換它們。我試圖從它借用一些想法,所以我現在的WordPress的Symfony的項目web
文件夾,這在我的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
所以我的一切,現在是通過parameters.ini
共享DB配置在Symfony中。接下來,我一直在試圖製作一個使用簡碼的簡單插件,這樣我就可以在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'));
我的第一個問題是,我不知道如何真正使一些Symfony2的途徑,其可以有參數,當給定的$request
不會有我需要的信息。另一個問題是,如果我想要提交表單,它可能無法工作,因爲它會將用戶重定向到WordPress之外,實際上我可能需要一系列全部存在於WordPress頁面中的表單。同時,我希望表單獨立於WordPress,以便他們自己工作。
所以我想知道這是否只是一個不好的/哈希的想法,這將無法正常工作,或者如果有一些方法來使它工作。
我也想過只是使用AJAX加載WordPress中的Symfony2代碼(假設我的所有用戶都啓用了Javascript)。作爲後備,該頁面可以轉到Symfony2專用應用程序,而不是在WordPress頁面中。這會更好/更容易嗎?我能看到的唯一缺點是我必須保持ajax代碼與我的Symfony2代碼同步。
您是否考慮過使用iframe將symfony2應用程序包含在wordpress中?因爲它只是一堆形式,你可以這樣做嗎? –
我在想我只能去那條路線 – Matt