螺栓 / 用户
Bolt 4 用户扩展
Requires
- php: >=7.1.3
- twig/twig: ^2.12 | ^3.0
Requires (Dev)
- bolt/core: ^4.0.0
- phpstan/phpstan: ^0.12.32
- phpstan/phpstan-symfony: ^0.12.6
- symplify/easy-coding-standard: ^8.1
README
Bolt用户扩展允许您向网站添加前端用户。
以下是该扩展允许的功能列表
- 定义用户组,允许他们注册和登录
- 限制ContentType(页面)只对属于特定组的用户可见
- 定义用户字段,并允许他们编辑自己的个人资料
安装
要从根目录安装此扩展,只需运行以下终端命令
composer require bolt/users
基本用法
要限制ContentType(例如ROLE_MEMBER
)只对特定组用户可用,请执行以下操作
- 在
config/extensions/bolt-usersextension.yaml
中定义您的用户组
groups: ROLE_MEMBER: redirect_on_register: homepage # Provide either a route name, or a URL redirect_on_login: / # Provide either a route name, or a URL initial_status: enabled # Once a user registers, he/she is automatically allowed to login
- 在
config/contenttypes.yaml
中限制对特定ContentType(例如entries
)的访问权限,例如只对那个用户组
entries: name: Entries singular_name: Entry fields: # ... normal ContentType definition allow_for_groups: [ 'ROLE_MEMBER', 'ROLE_ADMIN' ]
注意:使用allow_for_groups
选项可以限制对ContentType的访问(包括列表以及记录页面)。它只允许登录并具有正确权限的用户访问这些页面。甚至管理员也无法查看这些页面,因此我们添加了ROLE_ADMIN
组以确保管理员也有查看权限。
- 允许用户注册和登录
此扩展允许您在任意twig模板中包含注册表单。要添加注册表单,只需将以下内容添加到您的twig文件中
{{ registration_form(group='ROLE_MEMBER') }}
以下行将渲染一个带有用户名、密码和电子邮件字段的注册表单,用户可以填写。您必须始终指定此表单适用的用户组(在本例中为ROLE_MEMBER
)。使用该组注册的用户将自动获得访问限制在该组内的ContentType的权限。
目前,registration_form
函数接受以下选项
要渲染登录表单,请使用以下
{{ login_form() }}
登录函数没有指定组。扩展将尝试使用用户的凭据进行用户验证,并将正确的组分配给该用户。login_form
函数接受两个可选参数,withlabels
和labels
与registration_form
函数的工作方式相同。
用户资料
有时,您想对用户进行更多操作,而不仅仅是限制对某些页面的访问。此扩展允许您通过将ContentType链接到用户组来定义自定义用户字段。
例如,为了定义我们的'ROLE_MEMBER'组的出生日期,我们会这样做
- 在
config/contenttypes.ymal
中定义一个名为members
的ContentType,用于存储有关用户的信息。
members: name: Members singular_name: Member title_format: "{author.username}" fields: dob: type: date viewless: true
然后,在config/bolt-usersextension.yaml
中编辑扩展配置
groups: ROLE_MEMBER: redirect_on_register: homepage redirect_on_login: / initial_status: enabled contenttype: members # Link the 'members' ContentType to the 'ROLE_MEMBER' group.
现在,属于ROLE_MEMBER
组的用户将能够访问其位于/profile
的个人资料。您可以通过自定义members ContentType的记录模板来自定义此页面的外观。
- 可选地,您可能希望允许成员编辑其个人资料。要执行此操作,请将以下内容添加到配置中
groups: ROLE_MEMBER: redirect_on_register: homepage redirect_on_login: / initial_status: enabled contenttype: members allow_profile_edit: true # If true, members will be able to edit their profiels on /profile/edit . You must specify the edit template below profile_edit_template: 'edit_profile.twig'
在这种情况下,位于public/theme/your-theme/
目录中的edit_profile.twig
文件可以包含任何常规twig模板。以下是一个包含编辑表单的基本示例,您可以将其包含在内
<form method="post"> {% for field in record.fields %} <label for="fields[{{ field.name }}]"></label> {% if field.type === 'text' %} <input type="text" name="fields[{{ field.name }}]" value="{{ field.parsedValue }}" /> {% elseif field.type === 'textarea' %} <textarea name="fields[{{ field.name }}]">{{ field.parsedValue }}</textarea> {% elseif field.type === 'checkbox' %} <input type="checkbox" name="fields[{{ field.name}}]" value="{{ field.parsedValue }}" /> {% elseif field.type === 'date' %} <input type="date" name="fields[{{ field.name }}]" value="{{ field.parsedValue }}" /> {% endif %} {% endfor %} <!-- The input fields below are required for Bolt to process the form. Do not change them --> <input type="hidden" name="_csrf_token" value="{{ csrf_token('editrecord') }}"> <input type="hidden" name="_edit_locale" value="{{ user.locale }}"> <input type="hidden" name="status" value="published"> <input type="submit" value="save"> </form>
自定义注册和登录表单的外观
如果registration_form
和login_form
函数中提供的自定义选项不足,您可能希望使用以下函数
用于注册
用于登录
上述每个字段函数都接受一个可选的 withlabel
参数和一个也用于 registration_form
的 labels
参数。