使用标准SilverStripe模板时,$ Form的价值来自哪里?

时间:2015-05-21 00:06:21

标签: forms silverstripe

“简单”主题的页面布局模板(默认)包含:

<% include SideBar %>
<div class="content-container unit size3of4 lastUnit">
    <article>
        <h1>$Title</h1>
        <div class="content">$Content</div>
    </article>
        $Form
        $CommentsForm
</div>

$ Form的价值来自哪里?即使用它,我需要做什么?

我是否打算在页面控制器中定义一个返回表单的函数Form()?

2 个答案:

答案 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)。