silverstripe - Silverstripe 自定义前端表单未呈现
问题描述
我正在学习 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>
它没有呈现表单。如何呈现表单?
解决方案
在你的ArticlePage.ss
你正在调用$ContactForm
,但在你的控制器中它被命名CommentForm
,所以你应该调用它 - 这可能是问题......
推荐阅读
- python - 通过在选定的行 Pandas 上应用函数来创建新列
- reactjs - 如何在 React Native 中存储数据列表?
- mysql - Why does MySQL's `explain` not say `filesort` when it's using `filesort`?
- python - Python Pandas 日期时间索引创建数据框
- java - JPA:容器管理的实体管理器何时被清除或关闭?
- angular - 当不同的组件(不是父/子)说要这样做时,我如何重新加载 Angular 6 组件
- javascript - 如何将数组更改为(mxn)数组
- javascript - 在嵌套的ajax调用中设置全局变量
- bash - bash:别名:Anaconda2 5.3.0 安装程序添加出现在终端上
- html - 如何转出?