rawebone / view-model
此包最新版本(v0.1.0)没有可用的许可证信息。
该库提供了一种面向视图层的MVVM方法,强调可测试性和文档。
v0.1.0
2014-01-05 00:20 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- mockery/mockery: 0.8.0
- mustache/mustache: v2.5.0
- phly/mustache: 1.2.1
- phpunit/phpunit: *
- twig/twig: v1.15.0
- zeptech/annotations: 1.1.0
This package is not auto-updated.
Last update: 2024-09-24 00:37:28 UTC
README
视图模型提供了一个在模型、在域层中持有数据的结构,以及视图之间的抽象,视图是将数据插入用户界面的混合。这种抽象的存在是为了减少标记UI所需的逻辑量,并允许在不比较整个输出标记的情况下测试核心呈现逻辑。此外,如果您的模板系统更改,迁移逻辑应该非常简单。
该库提供
- MVVM模式的简单实现
- 适用于多个模板引擎的适配器
- 一个文档化视图模型的系统,以便将信息传递给设计师/产品经理
用法
视图模型
视图模型由一个定义逻辑的类和一个定义输出标记的模板组成
<?php namespace My\App\Views; // src/My/App/Views/Model.php use Rawebone\ViewModel\AbstractViewModel; class Model extends AbstractViewModel { // Define your logic/constructors here public function name() { return "John"; } }
<?php // src/My/App/Views/Model.view.php echo $model->name() . "\n";
引擎
该库默认支持多个模板系统
Rawebone\ViewModels\Engines\BasicPhpEngine
Rawebone\ViewModels\Engines\MustacheEngine
Rawebone\ViewModels\Engines\PhlyMustacheEngine
Rawebone\ViewModels\Engines\TwigEngine
引擎的用法相当简单
$engine = new \Rawebone\ViewModel\Engine\BasicPhpEngine(); echo $engine->render(new \My\Project\Views\Model()); // John
根据惯例,所有引擎适配器都会在其上下文中公开一个名为"model"的单个变量。此外,每个引擎都会将其特定的文件扩展名附加到由ViewModel
提供的文件名上(例如,".twig",".php")。
TwigEngine
、MustacheEngine
和PhlyMustacheEngine
都接受两个构造函数参数,第一个是封装的引擎,第二个是一个布尔值,指定是否应传递文件或传递文件的内容。
文档
您可能会与不了解应用程序内部结构的团队合作,或者想知道模板可以消费哪些数据。该库提供了一个工具,可以轻松地记录系统中的视图模型,以便您可以以所需的任何格式输出信息。
$meta = new \Rawebone\ViewModel\MetaData\Providers\ZeptechMetaDataProvider(): $model = $meta->collateFor(new \My\Project\Views\Model()); foreach ($model as $exposed) { echo "Type: " . ($exposed->isProperty() ? "Property" : "Method") . "\n" . "Name: " . $exposed->name() . "\n" . "Returns:" . $exposed->returnType() . "\n" . "Example: " . $exposed->example() . "\n"; }
然后可以按如下方式注解模型
namespace My\Project\Views; use Rawebone\ViewModel\AbstractViewModel; class Model extends AbstractViewModel { /** * @vmExpose * @vmReturn string * @vmExample JOHN */ public $upper; /** * @vmExpose * @vmReturn string * @vmExample John */ public function name() { return "John"; } }