Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Email Template Variable Scoping


4 Posts   375 Views


15 September 2012 at 8:54am Community Member, 13 Posts

Hi, have a question pertaining to the variable scope for email templates:

$mydo = new MyDataObject(); // assume prepopulated; contained a data field named "Subject" accessed by $mydo->Subject
$From = "";
$To = "";
$Subject = "My Email Subject";
$email = new Email($From, $To, $Subject);

The part that I am having issues with is the dataobject's field and the declared variable "$Subject"
In my "TemplateEmail", when I tried to access "$Subject", it should be rightfully accessing the value stored in $mydo->Subject, but what I am experiencing atm is the value stored as "My Email Subject" being printed in the template instead;
The code in the template for accessing the data is simply


Am I missing anything?


15 September 2012 at 9:09am Community Member, 13 Posts

I guess $Subject is a reserved variable for the email template to reference the actual email subject, regardless whether the variable is passed into the template.

Not sure if there's a way to override that, but I just changed the variable in my dataobject so that it doesn't name clash.


15 September 2012 at 11:39am Forum Moderator, 5511 Posts

I'm picking Email::getSubject() will override your Subject value on your model. A work around would be to define a getter on your DataObject

function getEmailSubject() {
return $this->dbObject('Subject');

Then use $EmailSubject so it won't clash.


15 September 2012 at 11:53am Community Member, 13 Posts

Yeah, got it Will, tks for the advise.