Silverstripe将表单提交到Formextension

时间:2018-02-09 11:34:14

标签: forms silverstripe

我使用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();
 }
} 

作为控制器,我传递null。将其提交到扩展程序中的正确控制器是什么?或者甚至可以这样做?

我试图传递它的PageController并处理那里的提交。但我无法让它发挥作用。

实际上,我想自己提交,以便我可以将其添加到多种页面类型中。

1 个答案:

答案 0 :(得分:1)

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

<强> NewsletterForm.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();
    }

}

<强> NewsletterFormExtension.php

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

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