私はそれをたくさん研究して試してきましたが、私は困惑しています。Symfony2のアクションをWordPressに埋め込む方法は?
私はWordPressでサイトを設定したいと思っています。これは私と一緒に働く別の人に役立ちます。サイトは当社の製品を宣伝し、情報を提供します。その後、ユーザーは一連のフォームを通じてサインアップできます。私は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やパーマリンクのようなページ内)に表示する必要があります。
私は(http://www.lowpress.com/)を統合する方法としてLowPressを研究してきましたが、WordPressのテーマをすべて削除し、Twigのテーマに置き換えることで、私が望む以上に多くのことができます。私wp-config.php
に私は、そこからいくつかのアイデアを借りてみましたので、今、私はsymfonyプロジェクトのweb
フォルダ内のワードプレスを持っており、この:
// ...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
だから私は今持っているすべての共有DBの設定ですparameters.ini
経由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でSymfony2コードを読み込むためにAJAXを使用することも考えていました(すべてのユーザーがJavascriptを有効にしていることを前提としています)。フォールバックとして、ページはWordPressページ内にあるのではなく、単にSymfony2専用アプリに行くことができます。それはより良い/簡単だろうか?私が見ることができる唯一の欠点は、Symfony2コードと同期してajaxコードを保持する必要があることです。
あなたはwordpressの中にsymfony2アプリケーションを含めるためにiframeの使用を検討しましたか?それはちょうど束のフォームから、あなたはおそらくそれを行うことができますか? –
私はちょうどそのルートに行く必要があると思っていた – Matt