Silverstripe 4 Неопределенный индекс: Подписаться - PullRequest
1 голос
/ 17 февраля 2020

Я создаю форму, подобную этой ссылке , но когда я пытаюсь отправить эти ошибки, мне показывается 1- как распространить эту форму на все классы {страницы} (я пробую это в Page & PageController и форма повторяется в моем классе всех остальных страниц) 2- как исправить эти ошибки? enter image description here enter image description here

Page. php:

<?php

namespace {

    use SilverStripe\CMS\Model\SiteTree;
    use project\Subscribe;

    class Page extends SiteTree
    {
        private static $has_many = [
            'Subscribes' => Subscribe::class,
        ];
    }
}

PageController. php:

<?php

namespace {

    use SilverStripe\CMS\Controllers\ContentController;
    use SilverStripe\Forms\Form;
    use SilverStripe\Forms\FieldList;
    use SilverStripe\Forms\TextField;
    use SilverStripe\Forms\EmailField;
    use SilverStripe\Forms\TextareaField;
    use SilverStripe\Forms\FormAction;
    use SilverStripe\Forms\RequiredFields;
    use project\Subscribe;

    class PageController extends ContentController
    {

        private static $allowed_actions = [
            'EmailForm',
        ];
        public function EmailForm()
        {
            $form = Form::create(
                $this,
                __FUNCTION__,
                FieldList::create(
                    EmailField::create('Email',''),
                ),
                FieldList::create(
                    FormAction::create('handleSubscribe','Submit')
                        ->setUseButtonTag(true)
                        ->addExtraClass('button')
                ),
                RequiredFields::create('Email')
            )
                ->addExtraClass('input-group');

            foreach($form->Fields() as $field) {
                $field->addExtraClass('form-control')
                    ->setAttribute('placeholder', $field->getName().'*');
            }

            foreach($form->Fields() as $field) {
                $field->addExtraClass('form-control')
                    ->setAttribute('placeholder', $field->getName().'*');
            }

            $data = $this->getRequest()->getSession()->get("FormData.{$form->getName()}.data");

            return $data ? $form->loadDataFrom($data) : $form;
        }

        public function handleSubscribe($data, $form)
        {
            $session = $this->getRequest()->getSession();
            $session->set("FormData.{$form->getName()}.data", $data);

            $existing = $this->Subscribes()->filter([
                'Subscribe' => $data['Subscribe']
            ]);

            if($existing->exists()) {
                $form->sessionMessage('That Email already exists! Spammer!','bad');

                return $this->redirectBack();
            }

            $subscribe = Subscribe::create();
            $subscribe->PageID = $this->ID;
            $form->saveInto($subscribe);
            $subscribe->write();

            $session->clear("FormData.{$form->getName()}.data");
            $form->sessionMessage('Thanks for your comment!','good');

            return $this->redirectBack();
        }

    }
}

Suscribe. php:

<?php

namespace projet;

use SilverStripe\ORM\DataObject;
use SilverStripe\Forms\FieldList;

class Subscribe extends DataObject
{
    private static $singular_name = 'Subscribe';
    private static $table_name = 'Subscribe';

    private static $db = [
        'Email' => 'Varchar(100)',
    ];
    private static $has_one = [
        'Page' => Page::class,
        'Home' => Home::class,
    ];
    private static $summary_fields = array(
        'Email' => 'Email',
    );

}

Home. php:

<?php

namespace project;

use Page;
use PageController;


class Home extends Page {
    private static $singular_name = 'Home';
    private static $description = 'Index Page';
    private static $table_name = 'Home';
    private static $icon = 'app/icon/home.png';

    private static $has_many = [
        'Subscribes' => Subscribe::class,
    ];


}

class HomeController extends PageController {


}

Как расширить, исправить не дублирующиеся данные и распространиться на весь проект?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...