SilverStripe:试图实现联系人表单功能,但却得到了死亡的白色屏幕
我正在关注这个 我有一个页面叫“Contact.ss”。php文件如下所示:SilverStripe:试图实现联系人表单功能,但却得到了死亡的白色屏幕,silverstripe,Silverstripe,我正在关注这个 我有一个页面叫“Contact.ss”。php文件如下所示: class Contact extends Page { private static $has_one = array ( 'Photograph' => 'Image' ); static $db = array ( 'MailTo' => 'Varchar(100)', 'SubmitText' => 'Text'
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);
}
}
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);
}
但是,当我在模板中调用$ContactForm
时,当我尝试加载页面时,会出现一个空白屏幕。(500错误)
我已检查是否可以通过将所有ContactForm()
的代码替换为以下代码来从模板调用函数:
return "Hello, World!"
它可以工作,所以我知道函数正在被调用。但是我看不出教程中的代码有什么问题
有人能帮我吗 问题是,您使用的教程是在使用较新版本SilverStripe 3.1时为SilverStripe 2.4编写的 对于SilverStripe 3.1,我建议您阅读而不是SSBits教程。SSBits教程从2010年开始,适用于SilverStripe 2.4。SilverStripe前端表单课程于2015年开始,适用于当前版本的SilverStripe 对于您当前的代码,有许多位代码需要更新才能在最新版本的SilverStripe中工作
字段集
已替换为字段列表
。您需要在代码中将字段集
的每个实例替换为字段列表
您的联系人表单应该更像这样:
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);
}
}
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\u操作
声明为私有:
private static $allowed_actions = array(
'ContactForm'
);
private static $db = array (
'MailTo' => 'Varchar(100)',
'SubmitText' => 'Text'
);
以及您的$db
作为私有:
private static $allowed_actions = array(
'ContactForm'
);
private static $db = array (
'MailTo' => 'Varchar(100)',
'SubmitText' => 'Text'
);