没有找到Drupal 8类'Drupal \ Core \ Session \ AccountInterface'

时间:2018-03-20 13:20:45

标签: php drupal drupal-8

我正在尝试在我的Drupal站点根目录中编写一个自定义php脚本,检查用户是否已登录。要检查这一点,我导入bootstrap.inc。但是,当我这样做时,它会抛出这个错误 enter image description here

这是我网站root中的php脚本代码:

<?php
require_once './core/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
global $user;
var_dump($user->uid);
?>

任何人都有解决方案吗?

2 个答案:

答案 0 :(得分:0)

要引导Drupal 8,您需要不同的代码。 Drupal 8没有任何drupal_bootstrap()函数,因此您使用的代码会抛出PHP错误。

您可以使用authorize.php作为指导来编写自己的脚本。

use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

$autoloader = (require_once 'autoload.php');

try {
  $request = Request::createFromGlobals();
  $kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
  $kernel->prepareLegacyRequest($request);
} catch (HttpExceptionInterface $e) {
  $response = new Response('', $e->getStatusCode());
  $response
    ->prepare($request)
    ->send();
  exit;
}

\Drupal::moduleHandler()
  ->addModule('system', 'core/modules/system');
\Drupal::moduleHandler()
  ->addModule('user', 'core/modules/user');
\Drupal::moduleHandler()
  ->load('system');
\Drupal::moduleHandler()
  ->load('user');

$account = \Drupal::service('authentication')
  ->authenticate($request);
if ($account) {
  \Drupal::currentUser()
    ->setAccount($account);
  if (\Drupal::currentUser()->isAuthenticated() {
    // The user is logged-in.
  }
}

答案 1 :(得分:0)

我通过使用完全不同的方法来解决这个问题。我写了一个模块,在用户登录drupal时设置一个cookie(我使用hook_user_login)。当用户注销时,我删除了该cookie(我使用了hook_user_logout)。这是我的test.module的代码:

/**
* @param $account
*/
function intersoc_content_user_login($account)
{
  setcookie("user", "loggedin", time() + (86400 * 30),"/"); 
}
/**
* @param $account
*/
function intersoc_content_user_logout($account)
{
  if (isset($_COOKIE['user']))
  {
    unset($_COOKIE['user']);
    setcookie('user', '', time() - 3600, '/'); //Clearing cookie
  }
}

然后在我的站点根目录中的自定义脚本中,检查cookie是否已设置。当cookie存在时=&gt;用户已登录。如果cookie不存在,则用户未登录。下面的isLoggedIn()函数:

/**
 * @return bool which indicates if the user is logged in or not
 */
private function isLoggedIn()
{
    if(isset($_COOKIE["user"]))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

这不是最美丽的解决方案,但它有效!