核心工厂(Be)
更新时间:2025年1月11日 15:38
浏览:1312
BE 双驱框架最核心的基础功能 Be 工厂,用来控制对象的创建,管理,及回收。
Be 工厂主要提供了几类方法:
- getXxx - 以 get 开头的 的方法使用了单像创建,多次调用将使用同一实例。
- newXxx - 以 new 开头的 的方法会新建一个实例,
- 其它
代码示例:
// 将重复使用一个数据库操作类,共用同一个数据库连接
$db = Be::getDb();
// 将新建一个数据库操作类,单独占用一个数据库连接
$db = Be::newDb()
getCid - 获取 swoole 模式下的协程ID
public static function getCid(): int
每个访问请求对应一个协程ID, 普通 php 模式下返回0
代码示例:
$cid = Be::getCid();
getRuntime - 获取运行时对象
public static function getRuntime(): \Be\Runtime\Driver
代码示例:
$runtime = Be::getRuntime();
getRequest - 获取请求对象
public static function getRequest() : \Be\Request\Driver
请求对象封装了两种模式下的差异。
代码示例:
$request = Be::getRequest();
// 获取 GET 请求数据
$id = $request->get('id', '');
// 获取 POST 请求数据
$id = $request->post('id', '');
// 获取 JSON 数据
$id = $request->json('id', '');
// 获取 Cookie 数据
$id = $request->cookie('id', '');
getResponse - 获取输出对象
public static function getResponse() : \Be\Response\Driver
为兼容 Swoole,开发人员需要使用 BE 框架提供的输出对象输出内容。
代码示例:
$response = Be::getResponse();
// 输出内容
$response->write('hello world!');
// 输出Cookie
$response->cookie('key', 'hello world!');
// 演染模板
$response->display('App.Cms.Article.Detail');
getConfig - 获取指定的配置文件
public static function getConfig(string $name): object
代码示例:
// 获取系统应用下的 ES 配置
$configEs = Be::getConfig('App.System.Es');
newConfig - 获取指定的配置文件,创新新实例
public static function newConfig(string $name): object
代码示例:
// 获取系统应用下的 ES 配置
$configEs = Be::newConfig('App.System.Es');
getLog - 获取 日志记录器 单例
public static function getLog(): \Be\Log\Driver
代码示例:
$log = Be::getLog();
$log->error('出错啦');
newLog - 创建 日志记录器 新的实例
public static function newLog(): \Be\Log\Driver
getProperty - 获取一个属性 单例
public static function getProperty(string $name): \Be\Property\Driver
代码示例:
$property = Be::getProperty('App.Cms');
$appName = $property->getName();; // APP 名称
$appIcon = $property->getIcon();; // APP 图标
$appPath = $property->getPath(); // APP 所在目录
getSession - 获取SESSION会话对象
public static function getSession(): \Be\Session\Driver
SESSION会话提供了 文件 和 Redis 两种驱动
代码示例:
$session = Be::getSession();
$session->set('userId', 123);; // 存储会话数据
$userId = $session->get('userId');; // 获取会话数据
getCache - 获取 Cache 单例
public static function getCache(): \Be\Cache\Driver
缓存提供了 文件 和 Redis 两种驱动
代码示例:
$cache = Be::getCache();
$cache->set('userId', 123);; // 缓存数据
$cache->set('userId', 123, 600);; // 缓存数据 600秒后失效
$userId = $cache->get('userId');; // 获取缓存数据
newCache - 创建 缓存对象 实例
public static function newCache(): \Be\Cache\Driver
getStorage - 获取 存储 单例
public static function getStorage(): \Be\Storage\Driver
存储提供了本地磁盘,阿里云OSS,腾讯云COS 等驱动
代码示例:
$storage = Be::getStorage();
// 上传 src.txt
// 如果存储驱动为本地磁盘,则上传到 /www 目录下:/www/abc.txt
// 如果存储驱动为对象存储,则上传到远端对象存储服务器中
$url = $storage->uploadFile('/dst.txt', 'src.txt');
newStorage - 创建 存储 新实例
public static function newStorage(): \Be\Storage\Driver
getRedis - 获取Redis对象 单例
public static function getRedis(string $name = 'master')
代码示例:
$redis = Be::getRedis();
$redis->set('userId', 123);; // 保存数据
$redis->setEx('userId', 600);; // 600秒后失效
$userId = $redis->get('userId');; // 获取数据
newRedis - 创建一个 Redis对象 实例
public static function newRedis(string $name = 'master')
getEs - 获取ES对象 单例
public static function getEs() : \Elasticsearch\Client
代码示例:
$es = Be::getEs();
$result = $es->search([
// ...
]);
newEs - 创建一个 ES对象 实例
public static function newEs() : \Elasticsearch\Client
getDb - 获取 数据库对象 单例
public static function getDb(string $name = 'master') : \Be\Db\Driver
代码示例:
$db = Be::getDb();
$articles = $db->getObjects('SELECT * FROM cms_article');
newDb - 创建一个 数据库对象 实例
public static function newDb(string $name = 'master') : \Be\Db\Driver
getTable - 获取指定的一个数据库表对象
public static function getTable(string $name, string $db = 'master') : \Be\Db\Table
注意,此方法特殊,因表对象不会有共享需求,固未做单例处理。
代码示例:
$articles = Be::getTable('cms_article')
->where('is_enable', 1)
->getObjects();
getTuple - 获取指定的一个数据库行记灵对象
public static function getTuple(string $name, string $db = 'master') : \Be\Db\Tuple
注意,此方法特殊,因行记灵对象不会有共享需求,固未做单例处理。
代码示例:
$tupleArticle = Be::getTuple('cms_article');
$tupleArticle->title = '新建文章';
$tupleArticle->insert(); // 插入
$tupleArticle = Be::getTuple('cms_article');
$tupleArticle->load('xxx'); // 加载主键为指定值的行
$tupleArticle->title = '编辑文章';
$tupleArticle->update(); // 更新
getTableProperty - 获取指定的一个数据库表属性
public static function getTableProperty(string $name, string $db = 'master') : \Be\Db\TableProperty
代码示例:
$tableProperty = Be::getTableProperty('cms_article');
// 获取表的主键,联合主键时返回数组
$primaryKey = $tableProperty->getPrimaryKey();
// 获取表的字段明细列表
$fields = $tableProperty->getFields();
getMongoDb - 获取 MongoDb 对象 单例
public static function getMongoDb(string $name) : \Be\MongoDb\Driver
newMongoDb - 创建一个 MongoDb 对象 新实例
public static function newMongoDb(string $name) : \Be\MongoDb\Driver
getService - 获取指定的一个服务 单例
public static function getService(string $name)
代码示例:
$service = Be::getService('App.Cms.Article');
// 调用服务的方法
$articles = $service->getLatestArticles(10);
newService - 创建一个服务 实例
public static function newService(string $name)
getLib - 获取指定的库 单例
public static function getLib(string $name)
newLib - 创建 指定的库 新实例
public static function newLib(string $name)
getPlugin - 获取指定的一个扩展 单例
public static function getPlugin(string $name)
newPlugin - 创建一个指定的扩展 新实例
public static function newPlugin(string $name)
getAdminPlugin - 获取指定的一个后台扩展 单例
public static function getAdminPlugin(string $name)
代码示例:
$adminPlugin = Be::getAdminPlugin('Curd');
$adminPlugin->setting([
// ...
])->execute();
newAdminPlugin - 创建一个新的指定的后台扩展 实例
public static function newAdminPlugin(string $name)
getTemplate - 获取指定的一个模板 单例
public static function getTemplate(string $template, string $theme = null)
getAdminTemplate - 获取指定的一个后台模板 单例
public static function getAdminTemplate(string $template, string $theme = null)
getMenu - 获取指定的一个菜单 单例
public static function getMenu($name): \Be\Menu\Driver
代码示例:
// 获取顶部菜单
$northMenu = Be::getMenu('North');
$menuTree = $menu->getTree();
foreach ($menuTree as $item) {
// ...
}
getAdminMenu - 获取后台菜单
public static function getAdminMenu()
代码示例:
$adminMenu = \Be\Be::getAdminMenu();
$adminMenuTree = $adminMenu->getTree();
getAdminRole - 获取指定的一个后台角色信息
public static function getAdminRole(string $roleId) :\Be\AdminUser\AdminRole
代码示例:
$roleId = 'xxxx';
$role = Be::getAdminRole($roleId);
// 判断角色是否有权限访问指定资源
if ($role->hasPermission($app, $controller, $action)) {
return true;
}
getAdminPermission - 获取后台权限信息
public static function getAdminPermission() : \Be\AdminUser\AdminPermission
setAdminUser - 后台用户登录后,设置当前后台用户
public static function setAdminUser($adminUser = null)
getAdminUser - 获取当前后台用户
public static function setAdminUser($adminUser = null) : \Be\AdminUser\AdminUser
代码示例:
$my = Be::getAdminUser();
// 判断用户是否登录
if ($my->isGuest()) {
// ...
}
$name = $my->name;
$avatar = $my->avatar;
setUser - 用户登录后,设置当前用户
public static function setUser($user = null)
getUser - 获取当前用户
public static function getUser(): \Be\User\User
代码示例:
$my = Be::getUser();
// 判断用户是否登录
if ($my->isGuest()) {
// ...
}
setGlobal - 设置全局数据
public static function setGlobal(string $name, $value)
Swoole 模式下,服务器重启前,该数据有效,普通模式下仅在当前访问结束前有效
代码示例:
Be::setBlobal('loaded', 1);
getGlobal - 获取全局数据
public static function getGlobal(string $name)
代码示例:
$loaded = Be::getBlobal('loaded');
hasGlobal - 全局数据是否存在
public static function hasGlobal(string $name): bool
代码示例:
if (Be::hasBlobal('loaded')) {
// ...
}
setContext - 设置上下文
public static function setContext(string $name, $value)
仅在当前会话下有效,会话结束后,数据销毁
代码示例:
Be::setContext('loaded', 1);
getContext - 获取上下文
public static function getContext(string $name)
仅在当前会话下有效,会话结束后,数据销毁
代码示例:
$loaded = Be::getContext('loaded');
hasContext - 上下文是否存在
public static function hasContext(string $name): bool
代码示例:
if (Be::hasContext('loaded')) {
// ...
}
gc - 回收资源
public static function gc()
开发人员一般不需要主动调用,框架会在合适的节点调用此方法回收资源
代码示例:
Be::gc();