c975l/user-files-bundle

该软件包已被放弃,不再维护。作者建议使用 c975l/user-bundle 软件包。

简单地在 FOSUserBundle 上添加一层以导航文件

安装: 98

依赖者: 0

建议者: 0

安全: 0

星级: 1

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v1.8 2018-02-05 14:47 UTC

This package is not auto-updated.

Last update: 2022-02-01 13:07:57 UTC


README

此软件包已被设置为只读并替换为 c975L/UserBundle

UserFilesBundle 执行以下操作

  • 使用 FOSUserBundle 将用户存储在数据库中
  • 提供补充文件(模板、控制器等)来管理这些用户
  • 添加字段,如姓名、姓氏、头像等
  • 显示注册的“挑战”
  • 允许禁用注册(仅注册一个或多个用户)

UserFiles Bundle 专用网页.

软件包安装

步骤 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_dashboarduserfiles_signoutuserfiles_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() 用于轻松添加注销和删除用户的功能。只需在控制器中按上述方式覆盖它们即可。