myth / bay
提供了一种简单的机制,用于在其它类中渲染视图片段。可用于提供 'widgets' 实现或类似功能。
This package is auto-updated.
Last update: 2022-04-08 04:27:42 UTC
README
The Bay 组件提供了一种简单、与框架无关的方式,在任意 view
或渲染的 HTML 中包含可重用的内容,同时将逻辑保存在单独的类或模块中。这使得在应用中实现可重用的 "widgets" 变得非常简单,尽管这个术语可能有些过于宏大。
一个常见的例子可能是博客的 "最近文章" 部分——实际内容来自更大应用中的博客模块,并在应用的多个地方显示,但你可以轻松地将其插入视图层中,而不是在每一个控制器中加载并发送到视图。
安装
安装通过 Composer 以 myth/bay 的形式处理。
更多信息可以在 wiki 中找到。
通用用法
Bays 只有一个真正的要求:你必须有一个类,该类已经加载或可以被自动加载,并且有一个返回字符串的函数。还有一些更细致的点需要考虑,但这些都是基本所需。
在这些示例中,我们将假设我们正在创建一个博客系统,并且我们希望将最近的文章作为 Bay 显示。
要实例化我们的 Bay 系统,我们只需创建一个新的 Myth\Bay\Bay
实例。
$bay = new Myth\Bay\Bay();
然后你需要确保该对象在视图层中可用。对于 CodeIgniter,你需要将其作为变量传递给 view()
命令。
不带参数调用
最简单的用法是调用一个不需要任何参数的单个方法。这是通过 display()
方法实现的。
不过,首先我们需要一个类和可以调用的方法。为了我们的目的,我们假设它可以很好地自动加载。
class Posts {
public function recentPosts()
{
$posts = $this->postModel->findLatest(5);
return $this->view('recentPosts', ['posts' => $posts] );
}
}
// In your view layer...
$bay->display("\Blog\Posts::recentPosts");
这将尝试自动加载并创建一个 \Blog\Posts
类的实例,并调用 recentPosts
函数。该 recentPosts
函数从数据库中获取最新的 5 篇文章,然后渲染一个格式正确的视图,将渲染的 HTML 返回给 Bay。
带参数调用
Bays 中的参数被处理为一个字符串,包含一个或多个键/值对。然后该字符串被解析为一个键/值对的数组,并将其传递给目标类的函数。这提供了一种简单的方式模拟命名参数,以便你可以以任何你想要的方式提供参数。
class Posts {
public function recentPosts( array $params=[] )
{
$limit = ! empty($params['limit']) ? $params['limit'] : 5;
$offset = ! empty($params['offset']) ? $params['offset'] : 0;
$posts = $this->postModel->findLatest( $limit, $offset );
return $this->view('recentPosts', ['posts' => $posts] );
}
}
// In your view layer...
$bay->display("\Blog\Posts::recentPosts", "limit=5 offset=0");
参数可以由空格(如所示)或逗号分隔,具体取决于您的喜好。或者,您可以将键/值对的数组作为第二个参数传递,它将原样使用。
$bay->display("\Blog\Posts::recentPosts", ['limit' => 5, 'offset' => 0] );
自定义加载器
Bay 支持使用自定义加载器,以防您需要为您的框架特别实现一个。这些是只负责定位和将类加载到内存中的简单类。它必须实现 Myth\Bay\LibraryFinderInterface
,该接口只有一个方法:find( $class )
。
已提供一个适用于 CodeIgniter 3 的加载器,如果需要可以作为示例。
要使用自定义加载器,您需要在实例化 Bay 类时将其作为第一个参数传递。
$bay = new Myth\Bay\Bay( new Myth\Bay\CI3Finder() );
一旦加载,此类将在其他自动加载失败定位类时使用。
缓存结果
Bays 支持缓存渲染输出,这样在许多情况下您就无需再次访问原始类(甚至无需自动加载它),从而提高性能。您通过在 display()
调用中提供一些额外信息来告诉它您想将其缓存。
display
方法的第三个(可选)参数是缓存应存储的名称。如果没有提供,将根据类名、方法名和 params 数组的 md5 哈希为您构建一个。第四个参数是缓存应存储的 分钟 数。
$bay->display("\Blog\Posts::recentPosts", "limit=5 offset=0", 'some-cache-key', 15);
此示例将结果缓存为 some-cache-key
键,并存储 15 分钟。15 分钟后,缓存将自动重新构建。默认 TTL 时间为 0 分钟。请确保检查您选择的缓存引擎的行为。
提供缓存引擎
为了使 Bays 以无框架的方式工作,我们需要一个用于缓存的框架集成库,就像上面用于自定义类加载器一样。这些类必须扩展 Myth\Bay\CacheInterface
并实现两个方法: get($key)
和 set($key, $content, $ttl)
。已提供 CodeIgniter 3 集成。
必须在类构造期间提供此集成类作为第二个参数。
$bay = new Myth\Bay\Bay( null, new Myth\Bay\CI3Cache() );