Forms Silverstripe谁将表单提交到Formextension

Forms Silverstripe谁将表单提交到Formextension,forms,silverstripe,Forms,Silverstripe,我使用silverstripe 4.0.3 我做了一个表格的扩展。我通过yml将扩展添加到PageController。这是我的扩展类: class NewsLetterFormExtension extends DataExtension { private static $allowed_actions = [ 'NewsletterForm' ]; public function NewsletterForm() { $form = Form::create(

我使用silverstripe 4.0.3

我做了一个表格的扩展。我通过yml将扩展添加到PageController。这是我的扩展类:

class NewsLetterFormExtension extends DataExtension
{
 private static $allowed_actions = [
    'NewsletterForm'
];

public function NewsletterForm()
{
    $form = Form::create(
        null,
        __Function__,
        FieldList::create(
            LiteralField::create('Newsletter','<h2>NewsLetter</h2>')
                ->addExtraClass(''),
            LiteralField::create('NLContent','<p>Erfaharen sie regelmäßig was uns beschäftigt</p>')
                ->addExtraClass(''),
            TextField::create('FirstName')
                ->setAttribute('palceholder', 'Vorname')
                ->addExtraClass(''),
            TextField::create('Surname')
                ->setAttribute('palceholder', 'Nachname')
                ->addExtraClass(''),
            EmailField::create('Email')
                ->setAttribute('palceholder', 'E-mail Adresse')
                ->addExtraClass('')
        ),
        FieldList::create(
            FormAction::create('handleNewsletter', 'Senden')
                ->addExtraClass('btn btn-primary btn-sm')
        ),
        RequiredFields::create('FirstName','Surname', 'Email')
    );
    return $form;
 }

 public function handleNewsletter($data, $form)
 {
    $Newsletter = Newsletter::create();
    $form->saveInto($Newsletter);
    try {
        $Newsletter->write();
    } catch (\Exception $e) {
        return $e->getMessage();
    }

    $form->sessionMessage('Danke für die Newsletter Anmeldung', 'good');

    return $this->redirectBack();
 }
} 
类扩展扩展扩展数据扩展
{
私有静态$allowed_操作=[
“通讯表格”
];
公共职能通讯表格(
{
$form=form::create(
无效的
__功能,
字段列表::创建(
LiteralField::创建('Newsletter','Newsletter')
->addExtraClass(“”),
LiteralField::create('NLContent','Erfaharen sie regelmäßig是uns beschäftigt

')) ->addExtraClass(“”), TextField::create('FirstName') ->setAttribute('palceholder','Vorname') ->addExtraClass(“”), TextField::create('姓氏') ->setAttribute('palceholder','Nachname') ->addExtraClass(“”), EmailField::创建('电子邮件') ->setAttribute('palceholder','E-mail address') ->addExtraClass(“”) ), 字段列表::创建( FormAction::create('handleNewsletter','Senden') ->addExtraClass('btn btn主btn sm') ), RequiredFields::create('FirstName'、'姓氏'、'Email') ); 返回$表格; } 公共函数handleNewsletter($data,$form) { $Newsletter=新闻稿::创建(); $form->saveInto($Newsletter); 试一试{ $Newsletter->write(); }捕获(\异常$e){ 返回$e->getMessage(); } $form->sessionMessage('Danke für die Newsletter Anmeldung','good'); 返回$this->redirectBack(); } }
作为控制器,我传递null。将其提交到扩展中的正确控制器是什么?或者甚至有可能这样做

我试着通过PageController并在那里处理提交。但是我不能让它工作


实际上,我想自己提交一个,这样我就可以将它添加到多表页面类型中

您可以尝试扩展表单类。这没有经过测试,但应该可以工作:)

newsletteform.php

class NewsletterForm extends Form {

    function __construct($controller, $name) {

        $form_name = $name;


        $fields = FieldList::create(
            LiteralField::create('Newsletter','<h2>NewsLetter</h2>')
                ->addExtraClass(''),
            LiteralField::create('NLContent','<p>Erfaharen sie regelmäßig was uns beschäftigt</p>')
                ->addExtraClass(''),
            TextField::create('FirstName')
                ->setAttribute('palceholder', 'Vorname')
                ->addExtraClass(''),
            TextField::create('Surname')
                ->setAttribute('palceholder', 'Nachname')
                ->addExtraClass(''),
            EmailField::create('Email')
                ->setAttribute('palceholder', 'E-mail Adresse')
                ->addExtraClass('')
        );


        $actions = FieldList::create(
            FormAction::create('handleNewsletter', 'Senden')
                ->addExtraClass('btn btn-primary btn-sm')
        );

        $validator = RequiredFields::create('FirstName','Surname', 'Email')

        parent::__construct($controller, $form_name, $fields, $actions, $validator);
    }



    handleNewsletter($data, $form) {
        $Newsletter = Newsletter::create();
        $form->saveInto($Newsletter);
        try {
            $Newsletter->write();
        } catch (\Exception $e) {
            return $e->getMessage();
        }

        $form->sessionMessage('Danke für die Newsletter Anmeldung', 'good');

        return $this->redirectBack();
    }

}
class NewsLetterFormExtension extends DataExtension {
    private static $allowed_actions = [
        'NewsletterForm'
    ];

    public function NewsletterForm() {
        $f = new NewsletterForm($this, 'NewsletterForm');
        return $f;
    }
}