saeven / circlical-laminas-tailwind-forms
使用Laminas构建Tailwind风格的表单
0.3.1
2023-08-08 16:49 UTC
Requires
Requires (Dev)
- laminas/laminas-coding-standard: ^2.3.0
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.4.2
This package is auto-updated.
Last update: 2024-09-11 19:07:29 UTC
README
我构建了这个工具,以创建一个标准化的“主题”方法来美化Laminas表单。在大型团队中,人们经常以不同的方式做事,自定义CSS。这可以阻止这种情况发生。
设计目标是
- 使系统尽可能透明(无厚覆盖),以便在Laminas/Form更改中存活。
- 允许您通过单个参数(主题)定义表单的外观
- 强制在PHP配置级别创建主题
- 当显式设置类时不会干扰,换句话说,如果需要,让路
- 尽可能小的占用空间
可选的,因为它非常主观
- TODO:自动绑定AlpineJS的响应式模型
- TODO:自动编写表单的XHR fetch脚本,以及错误显示
安装
即将推出。
使用方法
即将推出。
测试元素
您可以在单元测试中看到这些行为。到目前为止,我对它提供的支持感到满意
- 文本字段
- 按钮
- 复选框
- 切换(新功能)
定义默认样式
查看config/module.config.php文件,并查看form_themes/default-form-element
键。这些是在您的应用程序Tailwind配置中(例如,使用@apply)希望定义的类名。在定义您的表单(在init()中)时,您也可以在元素级别覆盖它们。
为了帮助您开始,这里有一些我在使用此库的项目中使用的内容
.default-form-element {
@apply shadow focus:ring-indigo-500 focus:border-indigo-500 block w-full sm:text-sm border-gray-300 rounded-md;
}
.default-form-element.error {
@apply focus:ring-red-500 placeholder-red-300 focus:outline-none focus:ring-red-500 block w-full sm:text-sm border-red-300 rounded-md text-red-900;
}
.default-form-error {
@apply mt-2 text-sm text-red-600;
}
.default-form-label {
@apply block text-sm font-medium text-gray-700;
}
.default-form-button {
@apply inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500;
}
.default-form-button-primary {
@apply inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500;
}
.default-form-button {
@apply bg-white py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500;
}
.default-form-help-block {
@apply mt-2 text-sm text-gray-500;
}
.default-form-toggle {
@apply self-start mt-2 bg-gray-200 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2;
}
.default-form-toggle.active {
@apply self-start mt-2 bg-indigo-600 relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2;
}
.default-form-toggle .toggle-control {
@apply translate-x-0 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out;
}
.default-form-toggle.active .toggle-control {
@apply translate-x-5 pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out;
}
.default-radio-option {
@apply h-4 w-4 border-gray-300 text-indigo-600 focus:ring-indigo-500;
}
.default-radio-label {
@apply ml-3 block text-sm font-medium text-gray-700;
}
.default-file-element {
@apply block w-full text-sm text-slate-500 file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-indigo-50 file:text-indigo-700 hover:file:bg-violet-100;
}
实现说明
- 由于FormElementManager::doCreate看到的表单名称具有不同的'resolvedName'值,因此对于表单来说,委托者不是一个选项。因此,使用了委托者来从ServiceManager“偷取”FormElementManager。您会看到ThemedFormDelegatorFactory没有使用服务管理器提供的回调,而是返回了一个类似代理的对象。在测试中,没有可感知或确定的性能影响。
- 主题在添加到库提供的表单中时推入表单元素。这是必要的,因为元素到父元素的链接不存在。如果将主题数据留在表单中,并让助手依赖于它,将会更高效,但这需要对laminas/laminas-forms进行彻底修改。