Приложение Symfony 2 с Wordpress как CMS

Я хотел бы создать приложение sf2 и поддерживать весь контент (категории, статьи, страницы, медиа и т.д.) в WordPress с интернационализацией (плагин wpml). Приложение будет иметь собственный администратор и управлять содержимым, которое пользователь будет входить в бэкэнд WordPress.

Мой план состоит в том, чтобы иметь контроллер sf2, поддерживаемый системой маршрутизации, и дать ему первый шанс определить маршрут и выполнить его. Если это не так, тогда пусть WordPress обрабатывает рендеринг страницы.

Я также думаю, что мне нужно будет вытащить контент WordPress на некоторые страницы sf2, такие как домашняя страница, где я могу поместить новейшие статьи вместе с содержимым sf2.

Кто-нибудь когда-либо делал это раньше? За и против? Предложения о том, как реализовать это? Спасибо!

Ответ 1

Посмотрите на эти два проекта, которые приближаются к интеграции Symfony-WordPress под разными углами:

Ответ 2

Есть несколько пакетов Sf2, которые помогают немного закрыть пробел, например https://github.com/kayue/KayueWordpressBundle, где вы можете использовать объекты Symfony2 для получения данных Wordpress, аутентифицироваться в Wordpress, использовать функции Wordpress в Twig, подобные вещи. Возможно, вы можете с этим справиться.

Я сделал это в недавнем проекте, и он работал очень хорошо.

Чтобы сделать эту работу, вам нужно иметь две отдельные базы данных и два менеджера сущностей (один для вашего приложения sf2, один для Wordpress) - по крайней мере, то, как он работал лучше всего для меня, имея реальное приложение sf2 с одной стороны и используя Wordpress на стороне для обработки динамических страниц.

Вот пример моей конфигурации:

//app/config.yml
doctrine:
dbal:
    default_connection:   default
    connections:
        default:
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
        cms:
            driver:   "%database_driver_cms%"
            host:     "%database_host_cms%"
            port:     "%database_port_cms%"
            dbname:   "%database_name_cms%"
            user:     "%database_user_cms%"
            password: "%database_password_cms%"
            charset:  UTF8

orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager:   default
    entity_managers:
        default:
            connection:       default
            mappings:
                MyFirstBundle: ~
                MySecondBundle: ~ #if you have more than one bundle in your application
        cms:
            connection:       cms
            mappings:
                KayueWordpressBundle: ~

И конфигурация KayueWordpressBundle:

//app/config.yml
kayue_wordpress:
# Site URL must match *EXACTLY* with WordPress setting. Can be found
# on the Settings > General screen, there are field named "WordPress Address"
site_url:       %blog_url% 

#Note : I put the site_url in my parameters.yml to get this working on all my environments (see comment below) 

# Logged in key and salt. Can be found in the wp-config.php file.
logged_in_key:  'samethingasinyourwpconfig'
logged_in_salt: 'samethingasinyourwpconfig'

# Optional: WordPress cookie path / domain settings.
cookie_path:    '/'
cookie_domain:  null

# Optional: Custom table prefix. Default is "wp_".
table_prefix:   'wp_'

# Optional: Entity manager configuration to use (cache etc). Default is 'default'.
entity_manager: 'cms' #here is where i put the name of my new entity manager defined above

Используя KayueWordpressBundle, теперь я могу получить доступ ко всем элементам моего Wordpress, используя диспетчер сущностей "cms". Используя меню Wordpress, мы смогли сделать наше приложение меню динамически интегрировать новые страницы, которые были добавлены к ним. Мы также смогли сохранить один и тот же верхний и нижний колонтитулы на нашем Wordpress с помощью завитка, поэтому все это было практически без проблем.

С практической стороны:

Я установил Wordpress в файл, расположенный в корневом каталоге моего проекта. Это означает, что я могу использовать с ним Git, развертывать его с помощью Capifony и т.д.

Обратите внимание, что дизайн, плагины и прочее необходимо добавить/отредактировать в локальной среде, а затем перенести в репозиторий Git перед развертыванием с помощью Capifony. Однако динамический контент вашего Wordpress (страницы, статьи) зависит от вашей базы данных, поэтому окончательный контент должен быть написан только в рабочей среде.

Ответ 3

Прежде всего, чтобы интегрировать Wordpress с Symfony 2, вам придется придумать план "клей", поскольку Wordpress не следует стандарты совместимости, а затем Symfony 2 и другие структуры для достижения этого уровня легкой интеграции.

Во-вторых, было бы здорово, если бы вы могли проверить Symfony CMF, которая в основном представляет собой реализацию структуры управления контентом, которая позволяет создавать собственные CMS поверх компонентов Symfony 2.

Третья и последняя точка будет заключаться в том, что эта интеграция, которую вы пытаетесь достичь, не имеет большого смысла. Первая часть ваших требований, когда вам нужен простой слой поверх Wordpress для обработки входящих запросов, может быть решена с помощью простого взлома кода переднего контроллера Wordpress.