davewid/owl

基于类的视图库,支持5.3+

1.2.2 2012-08-28 13:31 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:09:56 UTC


README

Owl 是一个可以与不同模板渲染引擎接口的视图库。Owl 使用 Mustache 作为默认渲染引擎。需要 PHP 5.3+。

安装

从版本 1.2.x 开始,您现在可以使用 Composer 安装 Owl 库。Owl 存放在 Packagist 上,所以您需要在 composer.json 文件的 require 部分添加以下内容。

"require":{
	....
	"davewid/owl": "1.2.*"
	....
}

或者,您可以访问 下载 页面,并点击最新版本以获取文件。如果您从 github 下载文件,您需要手动设置自动加载。

PHP-FIG

Owl 符合 PSR-0PSR-1

设置

Owl 库在渲染引擎和查找文件方面力求灵活性。不幸的是,这种灵活性在设置过程中增加了几个步骤。以下是您可以注入的两个东西,渲染引擎和文件查找器。

引擎

默认情况下,已设置 Mustache 渲染引擎。如果您想使用不同的引擎,可以使用 setEngine 来设置它。您的引擎必须实现 \Owl\Engine 接口。渲染引擎在请求中使用的任何视图和布局类之间共享,因此您只需在每个请求中设置一次引擎。

<?php

// Please don't do this as the Mustache engine is default, this is just an example
$engine = new \Owl\Engine\Mustache;
\Owl\View::setEngine($engine);

文件查找器

我们需要一种方式来查找要加载和最终渲染的模板文件。您需要指定一个实现 \Owl\Finder 的类来做到这一点。提供了直接文件系统类,如果您使用 Kohana 框架,还有一个使用级联文件系统的查找器(Badass!)。

<?php

$path = __DIR__.DIRECTORY_SEPARATOR."views";
$finder = new \Owl\Finder\FileSystem($path);
\Owl\View::setFinder($finder);

用法

现在您已设置好,让我们开始创建视图类并构建您的应用程序!

首先,您想创建一个扩展 \Owl\View 的新类。

<?php

class Homepage extends \Owl\View
{
	public $name = "Dave";
	public $title = "Welcome";
}

除了视图类之外,您还需要 mustache 模板。模板文件将自动从模板目录加载,基于类名。类名中的所有下划线和命名空间分隔符都转换为目录分隔符。如果您想手动指定文件的完整路径,可以重写 getFile 函数。

在我们的示例中,我们将在 __DIR__/views/Homepage.mustache 创建模板。

Hello {{name}}

然后我们只需渲染视图类(echo 也同样适用)。

<?php

// Assuming file finder is already set from above.
$content = new Homepage;

echo $content->render(); // Output: Hello Dave
// echo $content; <-- this works too

布局

Owl 库还附带一个布局类,可以帮助您构建可重用的布局文件。让我们快速看一下一个示例。

<?php

class Layout_Browser extends \Owl\Layout
{
	public $title = "My Page";
}

我们的模板文件在 __DIR__/views/Layout/Browser.mustache 将包含我们的 html 页面。

<!doctype html>
<html>
<head>
	<title>{{title}}</title>
</head>
<body>
	Content goes here...
</body>
</html>

这很好,但是真正动态的地方是可以向布局中添加内容。

向布局添加内容

首先,我们需要修改布局模板文件以包含内容部分。

<body>
	{{> content}}
</body>

然后我们可以传递一个 \Owl\View 类或原始 html 到布局中。

<?php

$layout = new Layout_Browser;
$layout->setContent($content);
echo $layout->render();

当布局被渲染时,它将用传递到布局中的内容替换内容部分 {{> content}},在我们的示例中是 Homepage 视图。

{{> content}}将被替换为Hello Dave。这可以让您拥有可重用的布局,并根据页面更改页面内容。很酷,对吧?

添加到布局

您应该知道最后一点是addedToLayout函数。

当一个扩展\Owl\View的类传递给布局类时,会调用addedToLayout函数,并将当前布局作为唯一参数传递。

这很强大,因为现在您可以使用此函数向布局添加内容。

比如说,您想添加一些js或css文件,因为特定页面更加动态或样式不同,您可以在addedToLayout函数中这样做。

为了快速示例,我将把视图类中的标题添加到布局标题中。

<?php

class Homepage extends \Owl\View
{
	public $name = "Dave";
	public $title = "Welcome";

	public function addedToLayout(\Owl\Layout $layout)
	{
		$layout->title .= "» {$this->title}";
	}

现在,布局渲染后,标题标签将渲染为:

<title>我的页面 &raquo; 欢迎光临</title>

闪存消息

Owl库提供了一个Message类,您可以在应用程序中的请求之间传递消息。

设置

在使用Message类之前,您需要提供一个实现了\Owl\Session的会话驱动程序。如果您使用的是Kohana框架,已提供了一个内部Session类的包装类,位于\Owl\Session\Kohana

一旦您有了会话驱动程序,您需要将其注入到类中。

<?php

// Anything that implements \Owl\Session will work.
$session = new \Owl\Session\Kohana;
\Owl\Message::setSession($session);

现在库已经准备就绪!

获取消息

要获取消息,只需运行get

<?php

\Owl\Message::get();

如果没有找到消息,此函数将返回false

设置消息

要设置闪存消息,只需做以下操作:

<?php

\Owl\Message::set($type, $message);

属性

包装方法

还有针对不同类型消息的包装方法。

<?php

\Owl\Message::error($message);
\Owl\Message::success($message);
\Owl\Message::notice($message);
\Owl\Message::warn($message);

探索

在Owl库中还有更多可以探索的内容,但我会留给您。如果您有任何问题/错误/关注事项,请使用此处GitHub上的错误跟踪器。

黑客攻击

如果您使用的是目前不受支持的框架,请Fork此存储库并添加这些文件。我唯一的要求是请使用并发送pull请求到develop分支。

许可协议

此代码受MIT许可证的许可。

Dave Widmer开发。