jaza / drupal-integration-bundle
A Drupal integration bundle for Symfony2.
Installs: 21
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 3
Forks: 1
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=5.3.2
- symfony/framework-bundle: 2.*
This package is not auto-updated.
Last update: 2024-11-18 15:30:20 UTC
README
This bundle lets you render a Symfony2 web app via Drupal 7. It also provides helpers for performing access control on a Symfony route, based on Drupal authentication and Drupal user roles. Plus a few other Symfony-Drupal integration helper methods.
Installation
1 Add to the 'require' section of composer.json:
"require" : {
"jaza/drupal-integration-bundle": "1.0.*@dev",
}
2 Register the bundle in app/AppKernel.php
$bundles = array( // ... new Jaza\DrupalIntegrationBundle\JazaDrupalIntegrationBundle(), );
Configuration
1 Add required config values to 'parameters.yml' file (or equivalent):
parameters:
# ...
drupal_root: /path/to/drupal
drupal_base_url: 'http://drupal.baseurl'
2 Add various optional config values to 'parameters.yml' file (or equivalent):
parameters:
# ...
drupal_is_embedded: true
drupal_menu_active_item: node/123
drupal_wysiwyg_input_format_id: full_html
drupal_css_includes: [/path/to/file1.css, /path/to/file2.css]
drupal_get_author_username_methodname: getAuthorUsername
drupal_get_author_uid_methodname: getAuthorUid
drupal_admin_roles: [administrator]
drupal_homelink_route: foo__default_index
drupal_homelink_text: 'Foo home'
Usage
Create a controller in your bundle
namespace YOURNAME\YOURBUNDLE\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class DefaultController extends Controller { public function indexAction() { $title = 'Foo hoo'; // Get the Drupal integration service and bootstrap Drupal $drupalIntegration = $this->container->get('drupal_integration'); $drupalIntegration->bootstrapDrupal(); // Throw a Symfony AccessDeniedException if the current // Drupal user is not logged-in. $drupalIntegration->limitAccessToAuthenticatedUsers(); // Easily check if the current response will be rendered via // Drupal or not - e.g. might have conditional template logic // based on this. $embedded = $this->container->getParameter('drupal_is_embedded'); // Easily check if the current user is a Drupal administrator // or not - e.g. might show an 'admin only' link in the // template based on this. $isAdmin = $drupalIntegration->isAdmin(); $engine = $this->container->get('templating'); // Render the Symfony template output and store it in a variable // here, rather than returning the response directly to // Symfony as you'd normally do. $content = $engine->render('FooBundle:Default:index.html.twig', array( 'title' => $title, 'embedded' => $embedded, 'is_admin' => $isAdmin, )); // Return a Symfony Response object - whether the content in // the response is output via Drupal or not depends on the // 'drupal_is_embedded' config value. return $drupalIntegration->getResponse($content); } public function adminAction() { $title = 'Administration'; $drupalIntegration = $this->container->get('drupal_integration'); $drupalIntegration->bootstrapDrupal(); $drupalIntegration->limitAccessToAuthenticatedUsers(); // Throw a Symfony AccessDeniedException if the current // Drupal user is not a Drupal administrator. $drupalIntegration->limitAccessToAdmin(); // Load the WYSIWYG library configured by the Drupal Wysiwyg // module (must be enabled if using this). // Enable WYSIWYG for the textarea with the specified ID. $drupalIntegration->loadWysiwyg('foo_bundle_textblocktype_content'); // You'll need to output this in a hidden field in the template, // next to the textarea, emulating Drupal's WYSIWYG / input // formats behavior. $inputFormatId = $drupalIntegration->getWysiwygInputFormatId(); // Get a rendered link to this app's Symfony front page. // Useful for e.g. displaying a breadcrumb throughout // the Symfony app. $homeLink = $drupalIntegration->getHomeLink(); $engine = $this->container->get('templating'); $content = $engine->render('FooBundle:Default:admin.html.twig', array( 'title' => $title, 'home_breadcrumb' => $homeLink, 'input_format_id' => $inputFormatId, )); return $drupalIntegration->getResponse($content); } public function viewAction(FooModel $fooModel) { $title = $fooModel->getTitle(); $drupalIntegration = $this->container->get('drupal_integration'); $drupalIntegration->bootstrapDrupal(); $drupalIntegration->limitAccessToAuthenticatedUsers(); // Throw a Symfony AccessDeniedException if the current // Drupal user is not a Drupal administrator or the // author of the specified object. $drupalIntegration->limitAccessToAdminOrAuthor($fooModel); $engine = $this->container->get('templating'); $content = $engine->render('FooBundle:Default:view.html.twig', array( 'title' => $title, )); return $drupalIntegration->getResponse($content); } }