tga / forum-bundle
Symfony TgaForumBundle (连接到Vanilla论坛的桥梁)
Requires
- php: >=5.3.2
- symfony/framework-bundle: ~2.1
- symfony/security-bundle: ~2.1
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 中使用。
通过内核,您可以使用两种方法:getUserManager
和getSessionManager
,用于管理用户和会话。
例如,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); }