programing

Symfony2 동작을 워드프레스에 내장하는 방법은?

css3 2023. 6. 9. 22:18

Symfony2 동작을 워드프레스에 내장하는 방법은?

제가 많이 조사해서 써봤는데 좀 당황스럽네요.

저는 워드프레스에 저와 함께 일하는 다른 남자에게 도움이 되는 사이트를 만들고 싶습니다.그 사이트는 우리의 제품을 광고하고 정보를 제공할 것입니다.그런 다음 사용자는 일련의 양식을 통해 등록할 수 있습니다.이 사용자 정의 부품(양식 등)을 Symfony2에 작성하고 싶습니다. WordPress에 연결할 필요가 없고 사용자가 등록한 후 데이터를 표시할 수 있는 재사용 가능한 Dutrin2 엔티티가 있을 것이기 때문입니다(어쨌든 WordPress 외부에서 표시됨).

그러나 디자인 측면에서는 전체 프로세스가 중단되지 않고 동일한 외관과 느낌을 갖기를 원합니다.그래서 양식은 실제로 워드프레스 페이지에서 렌더링되어야 합니다.우리는 무료가 아닌 사용자 지정 테마를 사용하고 있으며, 저는 워드프레스 CSS와 헤더를 Symfony 뷰에 복사하여 붙여넣고 싶지 않습니다.

이상적으로는 Symfony2 작업을 렌더링할 수 있는 WordPress의 페이지를 정의하는 것이 좋습니다.따라서 작업 자체가 양식을 표시하고 처리할 수 있습니다( 양식은 http://example.com/app.php/signup), 에서 WordPress와 독립적으로 작동해야 하지만 일반적으로 WordPress 사이트(예: http://example.com/index.php?page_id=2 또는 permallink와 같은 페이지 내).

저는 LowPress를 통합하는 방법으로 연구해 왔습니다(http://www.lowpress.com/), ). 하지만 워드프레스 테마를 완전히 제거하고 트윅 테마로 대체하는 것은 제가 원하는 것 이상의 일을 합니다.저는 그것으로부터 몇 가지 아이디어를 빌리려고 노력했습니다. 그래서 지금 저는 워드프레스를 가지고 있습니다.web및 내 Symfony 프로젝트의 입니다.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

이제공 DB 제다니공을 통한 .parameters.ini 짧은 .다음으로 저는 워드프레스 페이지에서 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는 양식을 것입니다. 페이지에 을 모두 도 있습니다.또 다른 문제는, 제가 양식을 제출하기를 원한다면, 그것은 아마도 작동하지 않을 것입니다. 왜냐하면 그것은 워드프레스 밖에서 사용자를 리디렉션할 것이기 때문입니다. 실제로는 제가 워드프레스 페이지에 존재하는 일련의 양식을 원할 수도 있습니다.동시에, 저는 양식이 워드프레스와 독립적이어서 그들이 스스로 작동하기를 원합니다.

그래서 저는 이것이 단지 효과가 없는 나쁜/해커적인 아이디어인지 아니면 그것을 작동시킬 수 있는 방법이 있는지 알고 싶습니다.

저는 또한 AJAX를 사용하여 워드프레스에 Symfony2 코드를 로드할 생각입니다(제 모든 사용자가 자바스크립트를 사용할 수 있다고 가정합니다).대체 수단으로, 그 페이지는 WordPress 페이지 내에 있지 않고 Symfony2 전용 앱으로 이동할 수 있습니다.그게 더 나을까요?제가 볼 수 있는 유일한 단점은 아약스 코드를 제 Symfony2 코드와 동기화해야 한다는 것입니다.

당신이 원하지 않는 "..WordPress CSS와 헤더를 Symfony 뷰에 복사 붙여넣기만 하면 됩니다." 저는 WordPress 헤더와 바닥글을 Symfony 뷰에 프로그래밍 방식으로 포함시킬 것을 제안합니다.

또한 Symfony보다 오버헤드가 낮고 Symfony 양식과 함께 작동하므로 Silex를 살펴보십시오.

  1. Symfony2 또는 Silex 설치
  2. WordPress 파일을 웹/폴더에 저장합니다.
  3. wp-config.php는 composer.json 옆에 있는 하나의 폴더에 살 수 있으며, 어쨌든 보안에 더 좋습니다.
  4. Symfony 또는 Silex 전면 컨트롤러를 signup/이라는 이름의 하위 폴더로 이동합니다.
  5. 전면 컨트롤러의 상단에 필요한 경로/포함 경로 수정합니다.
  6. 전면 컨트롤러 상단에 wp-load를 포함하는 선을 추가합니다.상위 폴더에서 php - 이 파일은 WordPress를 실행하고 모든 WordPress 기능을 사용할 수 있게 합니다 - 함수 내부가 아닌 글로벌 범위에서 포함되어야 합니다.
  7. 메서드를 WordPress로 합니다.get_header();그리고.get_footer();전면 컨트롤러의 Symfony 또는 Silex 코드 위와 아래에 있습니다.그것은 와 아래에 .$app->run();

파일 구조는 다음과 같습니다.

vendor/
  |-- Third party libraries 
web/
  |-- WordPress files
  |-- signup/
       |-- Symfony2 or Silex front controller
composer.json
wp-config.php

게시물에서 영감을 받았습니다.

Symphony 2는 전체를 사용하지 않고 프레임워크의 일부를 사용할 수 있도록 허용합니다.

폼은 분리할 수 있는 구성 요소로, 다음과 같습니다.

http://symfony.com/components

안타깝게도, 아직 문서가 많지 않기 때문에, 당신은 스스로 그것을 발견해야 할 것입니다...

edit: 경로 및 작업을 인식하기 위해 기호 라우팅을 사용하려면 HttpFoundation 구성 요소를 포함해야 하며 라우팅도 포함해야 합니다.

언급URL : https://stackoverflow.com/questions/10843410/how-to-embed-symfony2-actions-into-wordpress