SilverStripe自定义表单无法显示求助(首次使用,仅附截图)
SilverStripe自定义表单不显示?按这几步排查
1. 找对表单的编写位置
SilverStripe没有传统意义上的“入口文件”,自定义表单一般写在页面控制器里(比如默认的PageController.php);如果是自定义页面类型,就写对应页面的Controller类中。
2. 表单编写的基本规范
给你个最简示例,照着调整:
use SilverStripe\Forms\Form; use SilverStripe\Forms\TextField; use SilverStripe\Forms\EmailField; use SilverStripe\Forms\TextareaField; use SilverStripe\Forms\FormAction; class PageController extends ContentController { // 必须声明允许访问的表单方法,否则会被SilverStripe拦截 private static $allowed_actions = [ 'MyCustomForm' ]; public function MyCustomForm() { // 构建表单字段 $fields = FieldList::create( TextField::create('Name', '姓名'), EmailField::create('Email', '邮箱'), TextareaField::create('Message', '留言') ); // 设置提交按钮 $actions = FieldList::create( FormAction::create('handleMyCustomForm', '提交') ); // 配置必填项验证 $validator = RequiredFields::create(['Name', 'Email']); return Form::create($this, __FUNCTION__, $fields, $actions, $validator); } // 表单提交后的处理逻辑 public function handleMyCustomForm($data, $form) { $form->sessionMessage('提交成功!', 'good'); return $this->redirectBack(); } }
3. 在模板中调用表单
打开你要显示表单的页面模板(比如Page.ss),在需要的位置添加一行:
$MyCustomForm
注意这里的名称要和控制器里的方法名完全一致,大小写敏感。
4. 常见问题排查
- 遗漏
$allowed_actions:SilverStripe默认拦截未声明的方法,一定要把表单方法名加入数组 - 缓存未清除:开发环境修改代码后,访问
你的域名/dev/build?flush=all清理缓存,否则修改可能不生效 - 模板未对应:如果用了自定义页面类型,要确保对应的模板文件里也添加了表单调用代码
(用户提供的表单截图:
)
内容的提问来源于stack exchange,提问作者Toma Tomov
相关产品推荐
相关产品推荐

