“简单”主题的页面布局模板(默认)包含:
<% include SideBar %>
<div class="content-container unit size3of4 lastUnit">
<article>
<h1>$Title</h1>
<div class="content">$Content</div>
</article>
$Form
$CommentsForm
</div>
$ Form的价值来自哪里?即使用它,我需要做什么?
我是否打算在页面控制器中定义一个返回表单的函数Form()?
答案 0 :(得分:4)
是的,这有点奇怪。 $ Form由安全控制器使用,在登录情况下调用(/ Security / login,/ Security / lostpassword等等),因为这些模板可以是主题,它假定你的某个地方有一个$ Form变量模板,指示表单应呈现的位置。
您只需在Page.ss模板中使用它,因为安全控制器只是呈现通用页面。
答案 1 :(得分:1)
延伸ViewableData
的Silverstripe中的任何内容基本上都是ViewModel的两倍。这包括DataObject和Controller。因此,可以在这些对象上公开访问的内容暴露给View层,并可作为模板变量调用(无论是属性还是方法)。
$ Form的价值来自哪里?即使用它,我需要做什么?
所以基本上是的,你的假设是正确的。如果您在页面控制器类中定义public function Form()
(返回一个Form实例),您希望显示该表单,它将在模板上呈现一个表单(对于该类型的所有页面)。
我是否打算在页面控制器中定义一个返回表单的函数Form()? UncleCheese打算在他的回答中说,变量名$ Form是任意的。例如,您的方法可以命名为ContactForm(),在这种情况下,您需要提供模板$ ContactForm来显示表单(确保Form构造函数的第二个参数也反映了这一点 - http://docs.silverstripe.org/en/3.1/developer_guides/forms/introduction/使用 - { {1}}是避免这种问题的好方法。
然而,Form()默认情况下不会在page.php中显示为函数,也不会在__FUNCTION__
等中显示。ContentController
控制器使用Page.ss进行渲染(当您拥有CMS时)模块已安装) - 因此意味着如果你在某个地方没有$ Form,你将无法登录。所以保持这一点非常重要,除非你还定义了一个Security.ss来登录/丢失密码/等。与普通Page.ss布局不同的页面(在这种情况下,该模板需要$ Form)。