示例表单组件
这是一个示例组件,您可以从 com_exampleform 下载。
下载源代码后,将 com_exampleform 目录压缩成 zip 文件并安装组件。
然后转到 <您的域名>/index.php/component/exampleform
在您的 Joomla 实例上运行它。
这是一个 MVC 组件,演示了以下内容
- 使用 Joomla 表单 在表单中捕获数据
- 使用几个 标准表单字段
- 编写 自定义字段
- 编写 自定义服务器端验证规则
- 编写 自定义客户端验证规则
- 编写 自定义表单过滤器
您可以轻松地对其进行调整以试验其他标准字段,只需在表单 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 代码。