我正在一个超级管理员"用户可以创建其他用户,设置用户名和密码。我有一个AutoForm Meteor.users
根据附加到Usuarios.schema = new SimpleSchema({
...
username: {
type: String,
},
services: {
type: Object,
optional: true,
blackbox: true
},
"services.password": {
type: String,
optional: true,
autoform: {
type: 'password'
}
},
...
});
集合的Accounts.createUser()
呈现表单(使用Collection2)。
遵循Collection2 docs关于将架构附加到users集合的建议,我的架构如下所示:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
!-- Fix Porto Popup login -->
<referenceBlock name="form.additional.info">
<block class="W3solver\Phone\Block\Customer" template="W3solver_Phone::Customer.phtml" name="customer_form_user_attributes" cacheable="false">
<action method="setFormCode">
<argument name="code" xsi:type="string">customer_account_edit</argument>
</action>
<action method="setEntityModelClass">
<argument name="code" xsi:type="string">Magento\Customer\Model\Customer</argument>
</action>
</block>
</referenceBlock>
</body>
但是我希望将Password字段呈现为Username one(没有Services面板)。
我还没有找到解决方法。我需要在模式中使用服务对象类型属性,或者在用户插入失败时验证失败(使用babel-loader
),因此,面板将被渲染(因为属性的对象类型)。
关于如何实现所需模板渲染的任何想法?
答案 0 :(得分:0)
您的密码是&#39;服务的一部分&#39;对象,这就是使用quickForm或quickFields时在afObjectField中自动呈现的原因:
afObjectField
当您对作为Object的字段使用afQuickField组件时, 除非您覆盖,否则使用afObjectField组件呈现它 类型或指定选项。使用a时,默认情况下会发生这种情况 quickForm用于具有Object类型字段的模式。
afObjectField组件呈现所有对象字段的子字段 一起作为一个群体。该组标有名称 对象字段。该组的实际视觉表现形式会有所不同 根据您使用的主题模板。对于&#34; bootstrap3&#34;默认 模板,该组显示在带有标题的面板中。
解决方案A:手动表单呈现
要将密码呈现为单个字段,您需要手动设置autForm并使用afFieldInput引用字段。 mthen的形式可能看起来像(未经过测试,但代码看起来应该是这样的):
{{> autoForm id="login" schema=Usuarios.schema}}
{{> afFieldInput type="text" name="username"}}
{{> afFieldInput type="password" name="services.password"}}
{{/autoForm}}
其优势在于您的表单看起来完全符合您的要求,但却有缺点,您必须手动添加所有附加内容(验证消息和内容)。
解决方案B:更改架构
当您从服务组中提取密码时,您将获得与用户名相同的自动呈现效果:单个输入字段。
Usuarios.schema = new SimpleSchema({
...
username: {
type: String,
},
services: {
type: Object,
optional: true,
blackbox: true
},
...
password: {
type: String,
optional: true,
autoform: {
type: 'password'
}
},
...
});