c975l / user-files-bundle
Requires
- php: >=5.5.9
- c975l/email-bundle: ^1
- c975l/toolbar-bundle: ^1
- friendsofsymfony/user-bundle: ^2
- sensio/framework-extra-bundle: ^3
- symfony/assetic-bundle: ^2
- symfony/framework-bundle: ^3
README
此软件包已被设置为只读并替换为 c975L/UserBundle
UserFilesBundle 执行以下操作
- 使用 FOSUserBundle 将用户存储在数据库中
- 提供补充文件(模板、控制器等)来管理这些用户
- 添加字段,如姓名、姓氏、头像等
- 显示注册的“挑战”
- 允许禁用注册(仅注册一个或多个用户)
软件包安装
步骤 1:下载软件包
使用 Composer 安装库
composer require c975l/user-files-bundle
步骤 2:启用软件包
然后,通过将其添加到项目中 app/AppKernel.php
文件中注册的软件包列表中启用软件包
<?php class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // ... new FOS\UserBundle\FOSUserBundle(), new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), new c975L\EmailBundle\c975LEmailBundle(), new c975L\UserFilesBundle\c975LUserFilesBundle(), ]; } }
步骤 3:配置软件包
然后,在项目中 app/config.yml
文件中定义以下内容
#Swiftmailer Configuration swiftmailer: transport: "%mailer_transport%" host: "%mailer_host%" username: "%mailer_user%" password: "%mailer_password%" spool: { type: memory } auth_mode: login port: 587 #Doctrine Configuration doctrine: dbal: driver: "%database_driver%" host: "%database_host%" port: "%database_port%" dbname: "%database_name%" user: "%database_user%" password: "%database_password%" charset: UTF8 orm: auto_generate_proxy_classes: "%kernel.debug%" naming_strategy: doctrine.orm.naming_strategy.underscore auto_mapping: true #FosUserBundle fos_user: db_driver: orm firewall_name: main user_class: c975L\UserFilesBundle\Entity\User use_listener: true use_flash_notifications: true use_username_form_type: false model_manager_name: null from_email: address: "%mailer_user%" sender_name: "%mailer_user%" profile: form: type: c975L\UserFilesBundle\Form\ProfileType name: c975l_user_files_profile change_password: form: type: FOS\UserBundle\Form\Type\ChangePasswordFormType name: fos_user_change_password_form registration: confirmation: enabled: true template: FOSUserBundle:Registration:email.txt.twig form: type: c975L\UserFilesBundle\Form\RegistrationType name: c975l_user_files_registration resetting: token_ttl: 86400 email: template: FOSUserBundle:Resetting:email.txt.twig form: type: FOS\UserBundle\Form\Type\ResettingFormType name: fos_user_resetting_form service: mailer: fos_user.mailer.default email_canonicalizer: fos_user.util.canonicalizer.default username_canonicalizer: fos_user.util.canonicalizer.default token_generator: fos_user.util.token_generator.default user_manager: fos_user.user_manager.default #EmailBundle c975_l_email: #Email address used to send emails sentFrom: 'contact@example.com' #UserFilesBundle c975_l_user_files: #Name of site to be displayed site: 'Example.com' #Indicate the Route to be used after Logout logoutRoute: 'home' #If registration is allowed or not registration: false #true(default) #(Optional) If you want to display the gravatar linked to the email user's account gravatar: true #null(default) #(Optional) If you want to save the email sent to user when deleting his/her account in the database linked to c975L/EmailBundle databaseEmail: true #false(default) #(Optional) If you want to archive the user in `user_archives` table (you need to create this table, see below) archiveUser: true #false(default)
然后在 app/parameters.yml
中添加正确的值
parameters: database_driver: pdo_mysql database_host: localhost database_port: 80 database_name: database_name database_user: databse_user database_password: database_password mailer_transport: smtp mailer_host: mail.example.com mailer_user: contact@example.com mailer_password: email_password
最后在 app/security.yml
中
security: encoders: FOS\UserBundle\Model\UserInterface: bcrypt role_hierarchy: ROLE_MODERATOR: ROLE_USER ROLE_ADMIN: [ROLE_MODERATOR, ROLE_USER] ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_MODERATOR, ROLE_USER] providers: fos_userbundle: id: fos_user.user_provider.username_email firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager login_path: fos_user_security_login check_path: fos_user_security_check default_target_path: userfiles_dashboard remember_me: secret: '%secret%' lifetime: 31536000 path: / secure: true anonymous: true
步骤 4:创建 MySql 表
使用 /Resources/sql/user.sql
创建 user
表,如果尚未存在。DROP TABLE
被注释掉以避免意外删除。您还可以创建 user_archives
表 + 存储过程,在删除账户时存档用户,为此复制粘贴文件 /Resources/sql/user.sql
中的代码,然后将配置值 archiveUser
设置为 true。
步骤 5:启用路由
然后,通过将它们添加到项目中 app/config/routing.yml
文件中启用路由
fos_user: resource: "@FOSUserBundle/Resources/config/routing/all.xml" c975_l_user_files: resource: "@c975LUserFilesBundle/Controller/" type: annotation #Multilingual website use: prefix: /{_locale} prefix: /
覆盖模板
强烈建议使用 从第三方软件包覆盖模板功能 以完全与您的网站集成。
为此,只需在您的应用程序中创建以下结构 app/Resources/c975LUserFilesBundle/views/
,然后在其中复制文件 layout.html.twig
,以覆盖现有的软件包文件,然后应用您需要的更改。
您还必须覆盖
app/Resources/c975LUserFilesBundle/views/emails/layout.html.twig
以设置与您的电子邮件相关的数据。app/Resources/c975LUserFilesBundle/views/fragments/registerAcceptanceInfo.html.twig
以显示在注册表中显示的链接(使用条款、隐私政策等)。app/Resources/c975LUserFilesBundle/views/fragments/deleteAccountInfo.html.twig
,该文件将列出删除账户对用户的影响,显示在删除账户页面上。app/Resources/c975LUserFilesBundle/views/fragments/dashboardActions.html.twig
以添加您自己的操作(或任何其他内容)到仪表板中,例如:
您可以通过 {% include('@c975LUserFiles/fragments/navbarMenu.html.twig') %}
添加导航栏菜单。如果需要,您可以覆盖它,或者简单地覆盖 /fragments/navbarMenuActions.html.twig
以在其上方添加操作。
路由
路由是 FOSUserBundle + userfiles_dashboard
、userfiles_signout
和 userfiles_delete_account
所使用的。
使用 HwiOauth(社交网络登录)
您可以在登录页面上显示用于使用社交网络/的链接。**此包不实现此功能**,它只在登录页面上显示按钮/。您必须自行配置 HWIOAuthBundle。如果使用它,请简单地在其 app/config/routing.yml
中指出。
c975_l_user_files: #Indicates the networks you want to appear on the login page hwiOauth: ['facebook', 'google', 'live'] #Default null
您还必须在网站上上传名为 web/images/signin-[network].png
(宽度="200" 高度="50")的图像,其中 network
是在 config.yml 文件中定义的名称。
覆盖实体
要将更多字段(地址等)添加到实体 User
,您需要覆盖它,但**必须**扩展 FOS\UserBundle\Model\User
,**不能**扩展 c975L/UserFilesBundle/Entity/User
。以下代码给出了实现方法
创建文件 src/UserFilesBundle/UserFilesBundle.php
<?php namespace UserFilesBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class UserFilesBundle extends Bundle { public function getParent() { return 'c975LUserFilesBundle'; } }
将文件 Entity/User.php
复制粘贴到 src/UserFilesBundle/Entity/
<?php //Change the namespace namespace UserFilesBundle\Entity; use Doctrine\ORM\Mapping as ORM; use FOS\UserBundle\Model\User as BaseUser; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Context\ExecutionContextInterface; use Symfony\Component\HttpFoundation\Request; use c975L\UserFilesBundle\Validator\Constraints as UserFilesBundleAssert; use c975L\UserFilesBundle\Validator\Constraints\Challenge; //... /** * @ORM\Entity */ class User extends BaseUser { //Keep all the fields and functions and add your own }
在 app/config/config.yml
中更改 user_class
fos_user: user_class: UserFilesBundle\Entity\User
覆盖表单
要覆盖表单,如上所述创建文件 src/UserFilesBundle/UserFilesBundle.php
,并在 src/UserFilesBundle/Form/[FormName]Type.php
中复制表单(例如,对于配置文件)
<?php //Change the namespace namespace UserFilesBundle\Form; //... use c975L\UserFilesBundle\Form\ProfileType as BaseProfileType; class ProfileType extends BaseProfileType { //Do your stuff... }
在 app/config/services.yml
中添加一个服务(例如,对于配置文件)
services: app.user_files.profile: class: UserFilesBundle\Form\ProfileType arguments: ['@security.token_storage'] tags: - { name: form.type }
在 app/config/config.yml
中更改与表单相关的 type
(例如,对于配置文件)
fos_user: profile: form: type: UserFilesBundle\Form\ProfileType
覆盖控制器
要覆盖控制器,如上所述创建文件 src/UserFilesBundle/UserFilesBundle.php
,并在 src/UserFilesBundle/Controller/UserController.php
中复制控制器
<?php //Change the namespace namespace UserFilesBundle\Controller; //... use c975L\UserFilesBundle\Controller\UserController as BaseController; class UserController extends BaseController { //DELETE USER /** * @Route("/delete", * name="userfiles_delete_account") * @Method({"GET", "HEAD", "POST"}) */ public function deleteAccountAction(Request $request) { parent::deleteAccountAction($request); //Do your stuff... } }
两个函数 signoutUserFunction()
和 deleteAccountUserFunction()
用于轻松添加注销和删除用户的功能。只需在控制器中按上述方式覆盖它们即可。