Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SilverStripe:试图实现联系人表单功能,但却得到了死亡的白色屏幕_Silverstripe - Fatal编程技术网

SilverStripe:试图实现联系人表单功能,但却得到了死亡的白色屏幕

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'

我正在关注这个

我有一个页面叫“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);
    }
}
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'
);