我有以下代碼(示例)在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 #
- 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()
通過將其臨時重置。
相似問題
- drupal:多值下載欄位的webform提交令牌drupal8drupalwebformsdrupaltokens2020-11-20 04:54
current-user
令牌將始终从当前使用者那裏获取其資料,您不能使用引數覆盖它.见user_tokens
:如果您需要控製用於令牌的帐戶物件,請使用
user
代替