Pregunta:
Estoy tratando de crear instancias de entidad de Drupal a partir de un script externo que no es parte de Drupal o un módulo de Drupal.
Para Drupal 7 existía drupal_bootstrap
para cargar las dependencias Drupal requeridas. Sin embargo, después de una larga búsqueda, todo lo que encontré para Drupal 8 fue una nota de que drupal_bootstrap
está obsoleto para Drupal 8 .
Y de hecho, obtengo un
Llamada a la función indefinida drupal_bootstrap ()
cuando trato de llamarlo después de incluirlo como en
define('DRUPAL_ROOT', __DIR__ .'/../drupal');
require_once DRUPAL_ROOT . '/core/vendor/autoload.php';
require_once DRUPAL_ROOT . '/core/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Entonces, ¿cómo puedo usar la API de Drupal 8 desde un script externo?
Respuesta:
Para la versión actual de drupal 8.x:
define('DRUPAL_DIR', '/usr/share/nginx/html');
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
require_once DRUPAL_DIR . '/core/includes/database.inc';
require_once DRUPAL_DIR . '/core/includes/schema.inc';
// Specify relative path to the drupal root.
$autoloader = require_once DRUPAL_DIR . '/autoload.php';
$request = Request::createFromGlobals();
// Bootstrap drupal to different levels
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
$kernel->boot();
$kernel->prepareLegacyRequest($request);
$em = $kernel->getContainer()->get('entity.manager');
$entity = $em->getStorage('node')->create(
array(
'type' => "article",
'title'=> "test entity",
'body' => "body body body",
));
$entity->save();