首頁>Web>source

我有以下代碼(示例)在Cron上執行,並將SMS發送给使用者。

$token = \Drupal::token();
$message = Hey, [current-user:account-name];
$message_value = $token->replace($message);
 

執行cron時,將SMS文字作為' Hey Anonymous ",這在使用者登錄時可以在網站上正常執行,但在cron上則不能。

因此,我尝試通過使用者物件来替換令牌,如下所示,但這不起作用.得到相同的結果。

use Drupal\user\Entity\User;
$user = User::load($uid);
$message_value = $token->replace($message,['user' => $user]);

使用此令牌建立的节點太多.因此,我無法使用新的/自定義令牌来編輯它们.那麼,有没有办法在不編寫自定義令牌的情况下替換使用者令牌? 另一个解決方法是使用 str_replace 如下所示,但同一文字中可能還存在其他使用者令牌.所以不是可取的。

 $message_value = str_replace('[current-user:account-name]', $name, $message);

有任何建議吗?

最新回復
  • 8月前
    1 #

    current-user 令牌將始终从当前使用者那裏获取其資料,您不能使用引數覆盖它.见 user_tokens

    if ($type == 'current-user') {
      $account = User::load(\Drupal::currentUser()
        ->id());
      $bubbleable_metadata
        ->addCacheContexts([
        'user',
      ]);
      $replacements += $token_service
        ->generate('user', $tokens, array(
        'user' => $account,
      ), $options, $bubbleable_metadata);
    }
    

    如果您需要控製用於令牌的帐戶物件,請使用 user 代替

    $message = 'Hey, [user:account-name]';
    $message_value = $token->replace($message, ['user' => $account]);
    

  • 8月前
    2 #

    您的方法

    $user = User::load($uid);
    $message_value = $token->replace($message,['user' => $user]);
    

    由於user.tokens.inc:153(自8.8.11起)而無效:

     if ($type == 'current-user') {
        $account = User::load(\Drupal::currentUser()->id());
        $bubbleable_metadata->addCacheContexts(['user']);
        $replacements += $token_service->generate('user', $tokens, ['user' => $account], $options, $bubbleable_metadata);
      }
    

    因此,取決於您在哪裏稱呼 $token->replace ,您可以尝試將 \Drupal::currentUser()->id() 通過將其臨時重置。

  • wordpress:在相應的首字母下和列內按字母順序排列的術語列表
  • cdn:如果热土豆站點使用cloudflare,託管服務会有风险吗?