Я создаю форму, подобную этой ссылке , но когда я пытаюсь отправить эти ошибки, мне показывается 1- как распространить эту форму на все классы {страницы} (я пробую это в Page & PageController и форма повторяется в моем классе всех остальных страниц) 2- как исправить эти ошибки?
![enter image description here](https://i.stack.imgur.com/Ts4w3.png)
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 {
}
Как расширить, исправить не дублирующиеся данные и распространиться на весь проект?