davewid / owl
基于类的视图库,支持5.3+
Requires
- php: >=5.3
- mustache/mustache: 2.0.*
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 库在渲染引擎和查找文件方面力求灵活性。不幸的是,这种灵活性在设置过程中增加了几个步骤。以下是您可以注入的两个东西,渲染引擎和文件查找器。
引擎
默认情况下,已设置 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>我的页面 » 欢迎光临</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开发。