いろいろ調べて試してみたのですが、ちょっと困っています。
WordPress でサイトをセットアップしたいのですが、これは私と一緒に働いている別の人に役立ちます。このサイトは、当社の製品を宣伝し、情報を提供します。その後、ユーザーは一連のフォームからサインアップできます。このカスタム パーツ (フォームなど) を Symfony2 で記述したいのは、WordPress に関連付ける必要がなく、ユーザーがサインアップした後にデータを表示するための再利用可能な Doctrine2 エンティティがあるためです (表示はとにかく WordPress の外部で行われます)。 )。
しかし、デザインに関しては、プロセス全体が中断されず、同じルック アンド フィールを持つことを望んでいます。そのため、フォームは実際には WordPress ページでレンダリングする必要があります。私たちはカスタムの非フリー テーマを使用しており、大量の WordPress CSS とヘッダーを Symfony ビューにコピー アンド ペーストするのは嫌いです。
理想的には、Symfony2 アクションをレンダリングできる WordPress のページを定義したいだけです。したがって、アクション自体がフォームを表示および処理する可能性があります (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
だから私が今持っているのは、parameters.ini
Symfony を介した共有 DB 構成だけです。次に、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'));
$request
私の最初の問題は、与えられたものが必要な情報を持っていない場合に、パラメーターを持つ可能性のある Symfony2 ルートを実際にレンダリングする方法がわからないことです。もう1つの問題は、フォームを送信したい場合、WordPressページにすべて存在する一連のフォームが本当に必要な場合に、WordPressの外部にユーザーをリダイレクトするため、おそらく機能しないことです. 同時に、フォームを WordPress から独立させて、単独で動作するようにしたいと考えています。
だから私は、これがうまくいかない悪い/ハッキーなアイデアなのか、それともうまくいく方法があるのか 知りたい.
また、AJAX を使用して WordPress に Symfony2 コードをロードすることも考えていました (すべてのユーザーが Javascript を有効にしていると仮定します)。フォールバックとして、ページは WordPress ページ内ではなく、Symfony2 専用アプリに移動することができます。それはより良い/より簡単でしょうか?私が見ることができる唯一の欠点は、ajax コードを Symfony2 コードと同期させなければならないことです。