竹林风 2019-12-06 11:17:30 224次浏览 1条评论 1 0 0

做一个网站,后台在 backend 模块,前台在 frontend,
就有如下问题

  1. 后台发布新闻,需要跳转前台查看信息,假设网站新闻页面的地址美化后是 /news/100.html,后台无法直接生成前台的美化 URL
  2. 后台和前台缓存位置不一样,后台默认为 backend/runtime/cache,前台默认为frontend/runtime/cache,假如后台改了配置更新缓存,那么 \Yii::$app->cache->flush()无法对 frontend 生效
    ......

所以有需要跨分组调用组件的需要,比如backend调用frontend的缓存组件更新缓存等

实现

我是把方法写在Yii.php(重构继承\yii\BaseYii),写在其他方法也一样

代码

public static function Components($name, $appid = null)
{
    if ($appid == self::$app->id || $appid == null) {
        return self::$app->$name;
    }
    $componentsName = $appid . ucfirst($name);
    if (self::$app->has($componentsName)) {
        return self::$app->get($componentsName);
    } 
    $conf = include_once \Yii::getAlias("@{$appid}/config/main.php");
    if (isset($conf['components'][$name])) {
        self::$app->set($componentsName, $conf['components'][$name]);
        return self::$app->get($componentsName);
    } else {
        throw new \Exception("{$appid}模块未配置{$name}组件");
    }
}

参数 $name,组件名称,必选
$appid 应用名称,bootstrap.php 中配置的应用目录,最好应用ID和应用目录保持一致

用法

在后台创建前台URL

$frontendAuthManager=Yii::Components('authManager','frontend');
$frontendAuthManager->createUrl(['/news/info','id'=>'100']);//news/100.html

在后台更新前台缓存

$frontendCache=Yii::Components('cache','frontend');
$frontendCache->flush();

其他组件用法类似

亿速云
  • 评论于 2019-12-06 11:18 举报

    我觉得论坛需要换个富文本编辑器,这个编辑器真的好难用

    1 条回复
    评论于 2020-02-03 11:52 回复

    这个编辑器是我自己写的,还在完善中。

您需要登录后才可以评论。登录 | 立即注册