myth/bay

该包已被废弃且不再维护。作者建议使用 codeigniter4/CodeIgniter4 包。

提供了一种简单的机制,用于在其它类中渲染视图片段。可用于提供 'widgets' 实现或类似功能。

1.0-beta1 2015-05-28 04:43 UTC

This package is auto-updated.

Last update: 2022-04-08 04:27:42 UTC


README

Build Status Scrutinizer Code Quality

The Bay 组件提供了一种简单、与框架无关的方式,在任意 view 或渲染的 HTML 中包含可重用的内容,同时将逻辑保存在单独的类或模块中。这使得在应用中实现可重用的 "widgets" 变得非常简单,尽管这个术语可能有些过于宏大。

一个常见的例子可能是博客的 "最近文章" 部分——实际内容来自更大应用中的博客模块,并在应用的多个地方显示,但你可以轻松地将其插入视图层中,而不是在每一个控制器中加载并发送到视图。

安装

安装通过 Composermyth/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() );