tga/forum-bundle

Symfony TgaForumBundle (连接到Vanilla论坛的桥梁)

安装次数: 1,469

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 4

类型:symfony-bundle

0.1 2015-01-14 22:12 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:13:39 UTC


README

TgaForumBundle 是一个针对 Symfony2 的包,旨在同步 Symfony2 与论坛软件 Vanilla 2

自发布以来,Symfony2 缺乏一个完整、经过良好测试且功能强大的论坛包。但为什么还要创建一个已经存在于 PHP 中的新系统呢?

Vanilla 是一个基于框架的现代、灵活的论坛软件,提供完整的社区平台。本包的目的是将其连接到您的 Symfony 应用程序,使您可以将 Vanilla 作为 Symfony 的扩展使用。

安装

注意:此包同步 Vanilla 与 Symfony,而不是相反:Symfony 是主控端,Vanilla 是从属端。这意味着您应该将 Vanilla 订阅和登录(例如通过简单的服务器配置)重定向到您的 Symfony。

注意:当未知于 Vanilla 的用户成功登录到 Symfony 时,该包将创建一个 Vanilla 用户。创建的用户将在 Symfony 和 Vanilla 中具有完全相同的用户名(这是匹配字段)。

安装 Vanilla

通过从官方网站下载并在浏览器中运行它,在您的公开目录(web)中安装 Vanilla。

一旦完全安装,安装该包。

安装 Symfony 包

1. 使用 Composer 下载

composer require tga/forum-bundle

2. 注册它

编辑您的 AppKernel.php 文件

<?php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new Tga\ForumBundle\TgaForumBundle(),
            // ...
        );
    }
}

3. 配置它

编辑您的 config.yml 文件以注册 Vanilla 的存储位置

tga_forum:
    vanilla_dir: %kernel.root_dir%/../web/<your_vanilla_path>

4. 注册安全处理器

编辑 security.yml 配置文件以处理登录/注销成功

security:
    firewalls:
        main:
            form_login:
                success_handler: tga_forum.authentication_success_handler
            logout:
                success_handler: tga_forum.logout_success_handler

4. 完成设置

现在,通过 Symfony 连接/断开连接的每个用户也应在 Vanilla 中连接/断开连接。

注意:如果您遇到 Doctrine 无法更新架构的错误,因为 Vanilla 表,您可以在 Doctrine 配置中使用表过滤器

doctrine:
    dbal:
        schema_filter: ~^(?!GDN_)~

用户转换器

该包使用用户转换器概念从 Symfony 安全令牌构建 Vanilla 用户。这是一个可选过程,如果您想自定义由包创建的 Vanilla 用户,则可以进行此操作。通过声明自己的转换器,您可以选择要插入的数据。

使用默认转换器或 FOSUserBundle 转换器

默认情况下,该包提供两个转换器

- the default transformer: `tga_forum.default_user_transformer`
- the FOSUserBundle transformer for FOS users: `tga_forum.fos_user_transformer`

请参阅 使用转换器 以使用它们。

创建自定义转换器

用户转换器必须实现接口 Tga\ForumBundle\Transformer\UserTransformerInterface。您可以使用 DefaultUserTransformer 开始您自己的转换器。

<?php

namespace Tga\ForumBundle\Transformer;

use Symfony\Component\Security\Core\User\UserInterface;
use Tga\ForumBundle\Model\VanillaUser;

/**
 * Default transformer: does not do a lot, but enough to work
 *
 * @author Titouan Galopin <galopintitouan@gmail.com>
 */
class DefaultUserTransformer implements UserTransformerInterface
{
    /**
     * @param UserInterface $user
     * @return VanillaUser
     */
    public function createVanillaUser(UserInterface $user)
    {
        return new VanillaUser($user->getUsername());
    }
}

createVanillaUser() 方法由登录成功处理器调用,以将 Symfony 用户转换为 Vanilla 用户。

使用转换器

将其声明为服务并在包配置中注册

services:
    my_user_transformer:
        class: Acme\UserBundle\Transformer\MyUserTransformer
        
tga_forum:
    vanilla_dir: %kernel.root_dir%/../web/<your_vanilla_path>
    user_transformer: my_user_transformer

注意:如果您未指定 user_transformer 键,则将使用默认转换器。

它的工作原理?Vanilla 内核

Vanilla 内核是一个服务(tga_forum.vanilla),它能够在当前 Symfony 上下文中启动 Vanilla。一旦启动,所有 Vanilla 功能都可在 Symfony 中使用。

通过内核,您可以使用两种方法:getUserManagergetSessionManager,用于管理用户和会话。

例如,AuthenticationSuccessHandler(在Symfony中连接用户到Vanilla时使用)使用了内核和这些管理器。

public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
    $userManager = $this->vanillaKernel->getUserManager();
    $sessionManager = $this->vanillaKernel->getSessionManager();

    $vanillaUser = $userManager->findByUsername($token->getUsername());

    if ($vanillaUser) {
        $vanillaUserId = $vanillaUser;
    } else {
        $vanillaUserId = $userManager->register($token->getUser());
    }

    $sessionManager->login($vanillaUserId);
    $userManager->trackVisit($token->getUser());

    return parent::onAuthenticationSuccess($request, $token);
}