EduSoho开发修改 不修改文件更新系统模板

业务场景:在日常开发后,可能会修改到程序自身的模板文件,但是这些文件可能会随着系统的更新被覆盖掉。所以我们需要一个注入的方式,在不修改自身模板文件的情况下,进行代码的调整
创建渲染视图解析器 RenderViewResolver

<?php

namespace DiscordPlugin\Biz\Discord\Util;

use AppBundle\Component\ViewResolver\RenderViewResolver;

class DiscordRenderViewResolver implements RenderViewResolver
{
    public function __construct($biz)
    {
        $this->biz = $biz;
    }

    public function generateRenderView($view, array $parameters = array())
    {
        if (array_key_exists($bizPrefix, $this->biz['template_extension.discord'])) {
            return $this->biz["template_extension.discord"][$view];
        }

        return $view;
    }
}

注册解析器与过滤文件 DiscordPlugin

use DiscordPlugin\Biz\Discord\Util\DiscordRenderViewResolver;

// 需要替换的模板路径
$biz['template_extension.discord'] = [
    'settings/binds.html.twig'            => 'DiscordPlugin:settings:binds.html.twig',
    'login/oauth2-logins-block.html.twig' => 'DiscordPlugin:login:oauth2-logins-block.html.twig',
];

$biz['render_view_resolvers'] = function ($biz) {
    return [
        new DiscordRenderViewResolver($biz),
    ];
};

剖析思路 DefaultController

class DiscordController extends BaseController
public function indexAction()
{
    return $this->render('DiscordPlugin:Default:index.html.twig');
}

在程序的控制内的页面输入使用的是"$this->render"方法 BaseController

public function render($view, array $parameters = [], Response $response = null)
{
    $biz = $this->getBiz();
    foreach ($biz['render_view_resolvers'] as $resolver) {
        $view = $resolver->generateRenderView($view, $parameters);
    }
    return parent::render($view, $parameters, $response);
}

页面渲染有使用到 b i z [ ′ r e n d e r v i e w r e s o l v e r s ′ ] , 我 们 就 从 biz['render_view_resolvers'],我们就从 biz[renderviewresolvers]biz[‘render_view_resolvers’]下手 DefaultServiceProvider

$biz['render_view_resolvers'] = function ($biz) {
    return [
        new CourseRenderViewResolver($biz),
    ];
};

这是一个覆写方法 CourseRenderViewResolver

public function generateRenderView($view, array $parameters = array())
{
    if (isset($parameters['course'])) {
        $type = $parameters['course']['type'];
    } elseif (isset($parameters['courseSet'])) {
        $type = $parameters['courseSet']['type'];
    } elseif (isset($parameters['params']['type'])) {
        $type = $parameters['params']['type'];
    } else {
        return $view;
    }

    return DynUrlToolkit::getUrl($this->biz, $view, array('type' => $type));
}

业务判断 DynUrlToolkit

public static function getUrl($biz, $baseUrl, $params)
{
    $twigSegs = explode('.html.twig', $baseUrl);
    $bizPrefix = $twigSegs[0];
    $type = $params['type'];

    if (!empty($biz["template_extension.{$type}"]) && !empty($biz["template_extension.{$type}"][$bizPrefix])) {
        return $biz["template_extension.{$type}"][$bizPrefix];
    }

    return $baseUrl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Edusoho是一种在教育行业中广泛使用的在线学习平台,正如任何其他在线平台一样,它也存在一些安全漏洞。下面是一些可能的安全风险和解决方法: 1. 用户隐私泄露:在Edusoho平台上,用户提供了个人敏感信息,如姓名、电子邮件地址、学校/机构名称等。如果平台的安全性不够,恶意者可能会访问和利用这些个人信息。解决方法是加强用户数据的加密存储和传输,并采取访问控制措施,确保只有授权的人员能够访问用户数据。 2. 未经授权的访问:如果Edusoho平台的用户身份认证和权限管理存在漏洞,黑客可能会成功访问和操纵用户账户,并获取学习数据或篡改课程内容。应加强账户保护措施,如采用强密码策略、双因素身份验证等,确保只有授权用户才能登录和操作。 3. 恶意软件攻击:通过课程文件、插件或其他外部链接,恶意软件可能会被注入到Edusoho平台中,从而对用户和系统造成损害。平台管理员需要及时更新和监测系统的软件和插件,以确保它们是最新版本并没有已知的漏洞。 4. 数据备份与恢复:在任何在线平台上,数据丢失是一种常见的风险。如果Edusoho没有良好的数据备份和恢复机制,用户的学习数据和课程内容可能会因硬件故障、黑客攻击或人为错误而丢失。要解决这个问题,平台管理员应定期备份数据,并建立可靠的恢复程序。 总之,Edusoho作为一个在线学习平台,在设计和开发过程中必须高度关注安全性和隐私保护。通过采取合适的安全措施和持续监测,可以最大限度地减少安全漏洞和潜在的攻击风险,确保学习者的数据和隐私得到保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linlinlove2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值