基準に一致するように上記のクラスを変更するにはどうすればよいですか?
できません。IDがありません。少なくとも問題のメッセージ (つまり、舞台裏で発生しているイベントのメッセージ) に関連付けられた ID がない場合を除き、Class Swift_Plugins_DecoratorPlugin
独自の_Replacements
インターフェイスを提供する具体的なサブタイプを作成することはできません。交換依頼時のメッセージ。
置き換え用のデコレータ プラグインである独自のプラグインを作成しましょう。
<?php
interface My_Swift_Plugins_Decorator_Replacements extends Swift_Plugins_Decorator_Replacements
{
public function setMessage(Swift_Mime_Message $message);
}
class My_Swift_Plugins_DecoratorPlugin extends Swift_Plugins_DecoratorPlugin implements My_Swift_Plugins_Decorator_Replacements
{
private $_replacements;
public function __construct(My_Swift_Plugins_Decorator_Replacements $replacements) {
$this->_replacements = $replacements;
}
/**
* Invoked immediately before the Message is sent.
*
* @param Swift_Events_SendEvent $evt
*/
public function beforeSendPerformed(Swift_Events_SendEvent $evt) {
$this->setMessage($evt->getMessage());
parent::beforeSendPerformed($evt);
}
public function setMessage(Swift_Mime_Message $message) {
$this->_replacements->setMessage($message);
}
}
プラグインでメッセージに ID を割り当てると、が呼び出される前にメッセージ セットが取得されます。getReplacementsFor
次に、それをプロパティに割り当てて、その関数で読み取ることができます。
class DbReplacements implements My_Swift_Plugins_Decorator_Replacements {
private $message;
public function setMessage(Swift_Mime_Message $message) {
$this->message = $message;
}
public function getReplacementsFor($address) {
$sql = sprintf(
"SELECT * FROM user WHERE email = '%s' and id = '%d'",
mysql_real_escape_string($address),
$this->message->emailID;
);
$result = mysql_query($sql);
if ($row = mysql_fetch_assoc($result)) {
return array(
'{username}'=>$row['username'],
'{password}'=>$row['password']
);
}
}
}