跳至主要内容
版本:5.1

示例表单组件

这是一个示例组件,您可以从 com_exampleform 下载。

下载源代码后,将 com_exampleform 目录压缩成 zip 文件并安装组件。

然后转到 <您的域名>/index.php/component/exampleform 在您的 Joomla 实例上运行它。

这是一个 MVC 组件,演示了以下内容

您可以轻松地对其进行调整以试验其他标准字段,只需在表单 XML 文件中包含标准字段即可。

代码中包含大量注释以帮助您理解,下面提供了主要源文件的大致摘要。

管理员服务提供程序

路径:administrator/components/com_exampleform/services/provider.php

这是基本 MVC 组件的样板代码。对于组件,此文件放置在 Joomla 文件系统中的 /administrator 下。如果您想完全理解它,请阅读 依赖注入 部分。

从该文件,Joomla 实例化默认的 扩展和调度程序类,以及一个 MVC 工厂类,该类为我们的组件创建模型、视图和控制器类。

站点显示控制器

路径:components/com_exampleform/src/Controller/DisplayController.php

当您访问显示表单的站点页面(即导航到 URL .../index.php/component/exampleform)时,将运行此操作。

它获取关联的模型和视图类,并在视图实例上调用 display()。

站点 Exampleform 视图

路径:components/com_exampleform/src/View/Exampleform/HtmlView.php

这会调用模型来设置表单,然后调用 display() 来运行 tmpl 文件。

站点 Exampleform 模型

路径:components/com_exampleform/src/Model/ExampleformModel.php

这根据 表单 中的描述设置表单。

站点 Exampleform tmpl 文件

路径:components/com_exampleform/tmpl/exampleform/default.php

这使用 Web 资源管理器 来设置客户端验证的脚本。

然后它输出 <form> html,并使用 renderFieldset 输出字段。

提交按钮有一个 onclick 监听器,它调用 Joomla.submitbutton('exampleform.submit')。此函数将启动对服务器的 HTTP POST 请求,并将字段值作为 POST 参数,包括设置为 'exampleform.submit' 的 task 参数。

当 HTTP 请求到达服务器时,Joomla 将检查 task 参数,并因此调用 ExampleformController::submit() 方法,如 Joomla MVC 中所述。

示例 XML 表单

路径:components/com_exampleform/forms/example_form.xml

大部分内容都只是简单地使用 Joomla 标准表单字段

您可以轻松添加其他标准表单字段来试验它们。

此外,该文件还包括

自定义字段 的定义

addfieldprefix="My\Component\Exampleform\Site\Field"
name="time"
type="mytime"

自定义过滤器 的定义

addfilterprefix="My\Component\Exampleform\Site\Filter"
filter="lettersonly"

自定义客户端验证规则 的定义

class="inputbox validate-noUppercase"
data-validation-text="Error: No uppercase letters are allowed"

自定义服务器端验证规则 的定义

addruleprefix="My\Component\Exampleform\Site\Rule"
validate="noasterisk"

showon 属性 的使用。

站点 Exampleform 控制器

路径:components/com_exampleform/src/Controller/ExampleformController.php

当表单数据以 HTTP POST 请求发送到服务器时,Joomla 会检查 task 参数,由于此参数将设置为 'exampleform.submit',因此 Joomla 将调用 ExampleformController 类实例的 submit 函数。

此函数获取 POST 参数数组,并让模型根据 example_form.xml 中的定义再次设置表单。

然后它开始应用字段的过滤和验证规则。

如果数据验证失败,则数据条目将存储在会话中,并发出重定向回表单的操作。当接收到重新显示表单的 HTTP GET 请求时,ExampleformModel 中的 loadFormData 函数将检索会话数据并使用以前的条目预填充字段。

如果数据通过验证,则实例化 ExampleformReturn 视图,并将原始数据和过滤后的数据传递给它。

站点 ExampleformReturn 视图

路径:components/com_exampleform/src/View/ExampleformReturn/HtmlView.php

这只是有一个函数来接受来自控制器的传递的数据,并将其存储在本地。

站点 ExampleformReturn tmpl 文件

路径:components/com_exampleform/tmpl/exampleformReturn/default.php

这只是输出传递给视图的原始数据和过滤后的数据。

请记住,视图和 tmpl 文件共享相同的函数上下文,因此在视图中设置的变量可以在 tmpl 文件中访问。

自定义字段

路径:components/com_exampleform/src/Field/MytimeField.php

这是 mytime 自定义字段的源代码。

自定义过滤器

路径:components/com_exampleform/src/Filter/LettersonlyFilter.php

这是 lettersonly 自定义过滤器的源代码。

自定义验证规则

路径:components/com_exampleform/src/Rule/Noasterisk.php

这是 noasterisk 自定义服务器端验证规则的源代码。

媒体 joomla.asset.json 文件

路径:media/com_exampleform/joomla.asset.json

这根据 Web 资源管理器 的要求定义了组件的 JavaScript(和 CSS)资源及其依赖项。

对于组件,Joomla 始终自动处理此文件。

JavaScript 客户端验证代码

路径:media/com_exampleform/js/no-uppercase.js

这是自定义客户端验证规则的 JavaScript 代码。