在使用标准 SilverStripe 模板时,$Form 的值从何而来?
Where does the value of $Form come from, when using a standard SilverStripe template?
"simple" 主题(默认)的页面布局模板包含:
<% include SideBar %>
<div class="content-container unit size3of4 lastUnit">
<article>
<h1>$Title</h1>
<div class="content">$Content</div>
</article>
$Form
$CommentsForm
</div>
$Form 的值从何而来?即要使用它,我需要做什么?
我是否打算在 returns 表单的页面控制器中定义函数 Form()?
是的,这有点奇怪。 $Form 由安全控制器使用,它在登录情况下调用(/Security/login、/Security/lostpassword,等等),因为这些模板可以主题化,它假定您在某处有一个 $Form 变量在您的模板中指示表单应呈现的位置。
您只需要在 Page.ss 模板中使用它,因为安全控制器只呈现一个通用页面。
Silverstripe 中任何扩展 ViewableData
的东西基本上都可以兼作 ViewModel。这包括 DataObject 和 Controller。因此,这些对象上可公开访问的内容会暴露给视图层并可作为模板变量调用(无论是属性还是方法)。
$Form的值从何而来?即要使用它,我需要做什么?
所以基本上是的,你的假设是正确的。如果您在要显示表单的页面控制器 class 中定义 public function Form()
(其中 returns 一个表单实例),它将在模板上呈现一个表单(对于该表单的所有页面)类型)。
我是否打算在 returns 表单的页面控制器中定义一个函数 Form()?
芝士大叔在他的回答中想说的是变量名 $Form 是任意的。例如,您的方法可以命名为 ContactForm(),在这种情况下,您需要提供模板 $ContactForm 来显示表单(确保 Form 构造函数的第二个参数也反映了这一点 - http://docs.silverstripe.org/en/3.1/developer_guides/forms/introduction/ 使用 - __FUNCTION__
是避免这个问题的好方法。
然而,Form() 在 page.php 和 ContentController
等中默认不作为函数出现。然而,Security
控制器使用 Page.ss 来呈现(当你安装了 CMS 模块时) - 这意味着如果你在 Page.ss 某处没有 $Form,你将永远无法登录。所以保留它很重要,除非你还定义了一个 Security.ss 来制作 login/lostpassword/etc。与正常 Page.ss 布局不同的页面(在这种情况下该模板需要 $Form)。
"simple" 主题(默认)的页面布局模板包含:
<% include SideBar %>
<div class="content-container unit size3of4 lastUnit">
<article>
<h1>$Title</h1>
<div class="content">$Content</div>
</article>
$Form
$CommentsForm
</div>
$Form 的值从何而来?即要使用它,我需要做什么?
我是否打算在 returns 表单的页面控制器中定义函数 Form()?
是的,这有点奇怪。 $Form 由安全控制器使用,它在登录情况下调用(/Security/login、/Security/lostpassword,等等),因为这些模板可以主题化,它假定您在某处有一个 $Form 变量在您的模板中指示表单应呈现的位置。
您只需要在 Page.ss 模板中使用它,因为安全控制器只呈现一个通用页面。
Silverstripe 中任何扩展 ViewableData
的东西基本上都可以兼作 ViewModel。这包括 DataObject 和 Controller。因此,这些对象上可公开访问的内容会暴露给视图层并可作为模板变量调用(无论是属性还是方法)。
$Form的值从何而来?即要使用它,我需要做什么?
所以基本上是的,你的假设是正确的。如果您在要显示表单的页面控制器 class 中定义 public function Form()
(其中 returns 一个表单实例),它将在模板上呈现一个表单(对于该表单的所有页面)类型)。
我是否打算在 returns 表单的页面控制器中定义一个函数 Form()?
芝士大叔在他的回答中想说的是变量名 $Form 是任意的。例如,您的方法可以命名为 ContactForm(),在这种情况下,您需要提供模板 $ContactForm 来显示表单(确保 Form 构造函数的第二个参数也反映了这一点 - http://docs.silverstripe.org/en/3.1/developer_guides/forms/introduction/ 使用 - __FUNCTION__
是避免这个问题的好方法。
Form() 在 page.php 和 ContentController
等中默认不作为函数出现。然而,Security
控制器使用 Page.ss 来呈现(当你安装了 CMS 模块时) - 这意味着如果你在 Page.ss 某处没有 $Form,你将永远无法登录。所以保留它很重要,除非你还定义了一个 Security.ss 来制作 login/lostpassword/etc。与正常 Page.ss 布局不同的页面(在这种情况下该模板需要 $Form)。