我跟随此tutorial
我有一个名为' Contact.ss'的页面。 php文件如下所示:
class Contact extends Page {
private static $has_one = array (
'Photograph' => 'Image'
);
static $db = array (
'MailTo' => 'Varchar(100)',
'SubmitText' => 'Text'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Main', $Photograph = UploadField::create('Photograph'), 'Content');
$Photograph->getValidator()->setAllowedExtensions(array('png','jpeg','jpg','gif'));
$Photograph->setFolderName('photographs');
$fields->addFieldToTab("Root.Main", new Textfield('Mailto', 'Address to email contact form submission to'));
$fields->addFieldToTab("Root.Main", new TextareaField('SubmiteText', 'Text displayed after contact form submission'));
return $fields;
}
}
class Contact_Controller extends Page_Controller {
static $allowed_actions = array(
'ContactForm'
);
function ContactForm() {
// Create fields
$fields = new FieldSet(
new TextField('Name', 'Name*'),
new EmailField('Email', 'Email*'),
new TextareaField('Comments','Comments*')
);
// Create action
$actions = new FieldSet(
new FormAction('SendContactForm', 'Send')
);
// Create Validators
$validator = new RequiredFields('Name', 'Email', 'Comments');
return new Form($this, 'ContactForm', $fields, $actions, $validator);
}
}
但是当我在模板中调用$ContactForm
时,当我尝试加载页面时,我得到一个空白屏幕。 (500错误)
我已检查过是否可以通过将所有ContactForm()
代码替换为:
return "Hello, World!"
它有效,所以我知道正在调用该函数。但我无法看到教程中的代码有什么问题。
任何人都可以帮助我吗?
答案 0 :(得分:1)
问题是当您使用较新版本SilverStripe 3.1时,您使用的教程是为SilverStripe 2.4编写的。
对于SilverStripe 3.1,我建议浏览SilverStripe Frontend Forms lesson而不是SSBits教程。 SSBits教程是2010年开始的,适用于SilverStripe 2.4。 SilverStripe Frontend Forms课程从2015年开始,适用于当前版本的SilverStripe。
使用当前代码,需要更新许多代码才能在最新版本的SilverStripe中使用。
FieldSet
已被FieldList
取代。您需要在代码中将FieldSet
的每个实例替换为FieldList
。
您的ContactForm
看起来应该更像这样:
function ContactForm() {
// Create fields
$fields = FieldList::create(
TextField::create('Name', 'Name*'),
EmailField::create('Email', 'Email*'),
TextareaField::create('Comments','Comments*')
);
// Create action
$actions = FieldList::create(
FormAction::create('SendContactForm', 'Send')
);
// Create Validators
$validator = RequiredFields::create('Name', 'Email', 'Comments');
return Form::create($this, 'ContactForm', $fields, $actions, $validator);
}
在SilverStripe 3.1中,内置的静态变量需要声明为私有。
确保将$allowed_actions
声明为私有:
private static $allowed_actions = array(
'ContactForm'
);
与您的$db
一样私密:
private static $db = array (
'MailTo' => 'Varchar(100)',
'SubmitText' => 'Text'
);