jameswatts/cake-toolkit

将视图定义为类,提供强大的面向对象工厂接口,动态构建您的 CakePHP 应用程序 UI,并使用可配置的对象

安装: 3,294

依赖项: 0

建议者: 0

安全: 0

星标: 49

关注者: 12

分支: 9

公开问题: 0

类型:cakephp-plugin

dev-beta 2015-10-22 01:05 UTC

This package is not auto-updated.

Last update: 2024-09-28 13:35:34 UTC


README

Cake Toolkit 是一个为中等到大型的 Web 应用程序设计的 CakePHP 插件,这些应用程序需要可扩展和标准化的视图处理解决方案。

该插件允许将视图定义为类,提供了一个强大的面向对象工厂接口,用于动态构建应用程序的 UI,并使用可配置的对象。

该插件的主要功能包括

  • 面向对象设计: 每个UI元素都被定义和操作为一个对象,通过限制您的工作到接口的语义定义,您可以对视图的开发有最大的控制权。
  • 抽象和封装: 将视图定义为原生 PHP 类的能力解锁了语言的原生面向对象特性的潜力,允许扩展视图,抽象内容块,并在辅助方法中封装视图逻辑。
  • 关注点分离: 该插件的设计提供了对在开发中涉及的语言(如 PHPHTMLCSSJavaScript)的清晰和一致的分离,使得将专家分配到他们擅长的领域变得容易,而无需处理他们不熟悉的代码。
  • 可扩展的架构: 允许将 UI 元素的集合打包到工厂中,这使得不仅容易扩展现有的工厂,还可以创建符合您需求的自己的工厂。
  • 即插即用: 该插件的功能仅增加了 CakePHP 中现有的功能,使得 CTK 视图能够与正常的静态 ".ctp" 视图一起工作。
  • 遗留特性:CakePHP 中可用的视图的标准功能(如 布局元素内容块辅助方法)的可访问性给予了极大的关注。

要开始使用 Cake Toolkit,只需将插件包含到您的应用程序中,然后扩展 CtkAppController 以继承您所需的一切,例如

class ExampleController extends CtkAppController {

	public function index() {
		// action logic
	}
}

或者,使用 AppComponent 为现有的控制器,这还允许您 忽略 特定操作以继续使用正常的 ".ctp" 视图

public $components = array(
	'Ctk.App' => array(
		'ignoreAction' => array('example') // allow "example" action to continue using "example.ctp"
	)
);

然后您可以将视图定义为类,并使用通过包含的工厂提供的对象构建您的 UI,无需深入了解底层技术,例如

class IndexView extends CtkView {

	public $factories = array('Ctk.Html', 'Ctk.Js');

	public function build() {
		// create a HTML div
		$div = $this->Html->Div();
			// create a HTML button
			$button = $this->Html->Button(array(
				'value' => __('Click Me')
			));
			// bind an event to the button
			$button->bind('click', $this->Js->Alert(array(
				'text' => __('Hello World')
			)));
		// add the button to the div
		$div->add($button);
		// add the div to the view
		$this->add($div);
	}
}

该文件保存为 "IndexView.php",位于您的视图目录的子目录 "Ctk" 中。这有助于将类文件与正常的 ".ctp" 视图分开。因此,您的视图类的路径将是

app/View/Example/Ctk/IndexView.php

还可以使用特殊的 Factory 辅助程序将对象从 Cake Toolkit 导入到正常的静态 ".ctp" 视图中,将插件的功能带给现有的前端代码。

public $helpers = array(
	'Ctk.Factory' => array(
		'factories' => array('Ctk.Html', 'Ctk.Css')
	)
);

然后您可以在标记中使用这些对象,类似于使用 HTML 辅助程序时,例如

<div id="example">
	<?php echo $this->Factory->Html->Span(array('text' => __('Hello World'))); ?>
</div>

为了快速开始,请查看来自快速入门Hello World教程,这些教程位于文档部分。

要求

  • CakePHP 2+
  • PHP 5.3+

文档

安装后,Cake ToolkitCakePHP插件中内置了主页。要访问主页,从应用程序基础目录访问/ctk,例如

http://example.com/ctk

完整的文档以及教程都可以在存储库的Docs目录中找到。

性能

与所有现代网络应用一样,性能是一个需要考虑的重要问题,尤其是如果您正在运行一个大型企业级应用,它与高开发和维护成本相关。

需要注意的是,Cake Toolkit的目标不是提高MVC堆栈中视图层的性能,而是提高开发效率,并减少大规模应用所需的维护量。CakePHP已经提供了非常强大且可配置的缓存机制,这些机制在构建视图时对CTK也是可用的,并且强烈推荐,因为插件使用了大量的对象。

要快速为视图添加缓存,只需在控制器中定义$cacheAction属性,并定义要缓存的操作的设置。例如,对于一个名为"example"的操作,您可以使用以下方式定义1周的缓存时间

public $cacheAction = array(
	'example' => array('duration' => 36000)
);

插件包含一个Benchmark控制器,该控制器提供了各种在运行时可以缩放的操作,用于查看整体性能影响

  • single:此操作仅创建一系列XML节点。它接受一个参数,即要生成的节点数。
  • lineal:此操作创建一个线性层次结构中的多维XML节点序列。它接受一个参数,即要生成的节点级别数。
  • exponential:此操作创建一个指数层次结构中的多维XML节点序列。它接受一个参数,即要生成的指数因子数。
  • matrix:此操作以HTML表格显示数据矩阵。它接受两个参数,第一个是生成的行数,第二个是每行的单元格数。

以下表格显示了基于Benchmark控制器的single操作的基准性能可伸缩性,未启用缓存

这些测试是在使用4 GB RAM的Intel Pentium笔记本电脑上进行的,将PHP的最大内存设置设置为128 MB。

重要:请记住,在此控制器中未启用缓存,因为查看操作输出的更改对于使用目的至关重要。为CTK控制器的操作打开缓存在性能上几乎与标准静态".ctp"视图相同,因为插件使用了相同的路由来缓存文件。

调试

当"debug"设置为大于0的任何值时,并且假设未启用缓存,插件将向HTTP响应添加Ctk-Info头部,例如

Ctk-Info: controller=Benchmark, action=single, render-time=0.019, total-memory=6.86MB, memory-usage=1.83MB

此头部包含以下值

  • controller:被调用的控制器名称。
  • action:执行的操作名称。
  • render-time:渲染视图所需的时间(以秒为单位)。
  • total-memory:渲染完成前使用的总内存量。
  • memory-usage:插件专门消耗的内存。

还可以通过在视图类中将它设置为使用Schema渲染器来查看视图的内部对象模型。

public $renderer = 'Ctk.Schema';

这将输出使用的工厂和对象的抽象XML模式视图,例如:

<?xml version="1.0" encoding="UTF-8"?>
<ctk xmlns:Html="http://caketoolkit.org/schema/Html">
	<request address="127.0.0.1" method="GET" host="example.com" url="/example/index"/>
	<response controller="Example" action="index" layout="Ctk.Xml/schema" content-type="text/xml" charset="UTF-8"/>
	<schema>
		<Html:Div plugin="Ctk" template="div" text="">
			<Html:Button plugin="Ctk" template="button" value="Click Me"/>
		</Html:Div>
	</schema>
	<info render-time="0.019" total-memory="6.86MB" memory-usage="1.83MB"/>
</ctk>

输出还包括关于请求和响应的附加信息,以及存在于 Ctk-Info 报头中的性能统计数据。

除此之外,常用的 CakePHP 调试选项仍然可用,例如日志、debug() 函数和 Debugger 类。

支持

对于支持、错误和功能请求,请使用此存储库的 问题 部分。

贡献

如果您想向代码库贡献新功能、增强或错误修复,请遵循以下步骤:

在代码合并之前,关于您对存储库的贡献可能会有一些讨论,因此,如果需要,请准备好提供您贡献的反馈。

您可以在 此处 找到 Cake Toolkit 的贡献者列表。

许可

版权所有 2012-2013 James Watts (CakeDC)。保留所有权利。

根据MIT许可证授权。包含在此存储库中的源代码的重新分发必须保留每个文件中的版权声明。

致谢

特别感谢 Larry MastersCakePHP 的创始人,感谢他的帮助和支持;感谢 José Lorenzo 在我修改框架初期提供的输入;感谢 Florian Krämer 提出的建设性批评,以及整个 CakeDC 团队提供的反馈和鼓励。