Пользовательская форма интерфейса Silverstripe не отображается

#silverstripe #silverstripe-4

#silverstripe #silverstripe-4

Вопрос:

Я изучаю SilverStripe и создаю пользовательский файл интерфейса. Но я не могу отобразить форму в представлении.

Это мой ArticlePageController.php

 class ArticlePageController extends PageController
{
    private static $allowed_actions = [
        'CommentForm'
    ];

    public function CommentForm()
    {
        $form = Form::create(
            $this,
            __FUNCTION__,
            FieldList::create(
                TextField::create('Name', '')->setAttribute('placeholder', 'Name*'),
                EmailField::create('Email', '')->setAttribute('placeholder', 'Email*'),
                TextareaField::create('Comment', '')->setAttribute('placeholder', 'Comment*')
            ),
            FieldList::create(
                FormAction::create('handleComment', 'Post Comment')
            ),
            RequiredFields::create('Name', 'Email', 'Comment')
        );

        return $form;
    }

    public function handleComment($data, $form)
    {
        $comment = ArticleComment::create();
        $comment->ArticlePageID = $this->ID;
        $form->saveInfo($comment);
        $comment->write();

        $form->sessionMessage('Thanks for your comment!', 'good');

        return $this->redirectBack();
    }
}
 

Я добавил это в ArticlePage.php

 private static $has_many = [
        'Comments' => ArticleComment::class,
    ];
 

Это ArticleComment.php

 class ArticleComment extends DataObject
{
    private static $db = [
        'Name' => 'Varchar',
        'Email' => 'Varchar',
        'Comment' => 'Text'
    ];

    private static $has_one = [
        'ArticlePage' => ArticlePage::class,
    ];
}
 

В ArticlePage.ss я пытаюсь отобразить форму следующим образом.

 <h1>Post Your Comment</h1>
<div>
$ContactForm
</div>
 

Это не рендеринг формы. Как я могу отобразить форму?

Комментарии:

1. В вашем ArticlePage.ss вы вызываете $ContactForm , но в вашем контроллере она называется CommentForm, поэтому вы должны вызывать это — это может быть проблемой…

2. @ifusion вы должны опубликовать это в качестве ответа

Ответ №1:

В вашем ArticlePage.ss вы вызываете $ContactForm , но в вашем контроллере он назван CommentForm , так что вы должны вызывать это — это может быть проблемой…

Комментарии:

1. Спасибо ifusion. Я этого не заметил. Приветствия.