Helper 类为视图提供了常见且通用的方法,更好更快的格式化或者展现数据。
HTML Helper 有2个主要目的:帮助插入经常用到的 HTML 代码,帮助更快更方便的创建一个 Form。
插入良好格式的元素
charset(string $charset, boolean $return);
生成一个 charset的 META_Tag
css(string $path, string $rel = 'stylesheet', array $htmlAttributes, boolean $return = false);
创建 CSS 样式文件的连接。$rel 参数可以为该 tag 提供 rel=value,通常为 rel='stylesheet'
image(string $path, array $htmlAttributes, boolean $return = false);
生成<img />tag, 这个方法的返回值可以作为参数传入 link() 生成一个图片链接。
link(string $title, string $url, array $htmlAttributes, string $confirmMessage = false, boolean $ecapeTitle = true, boolean $return = false);
这个方法用来在视图中生成一个超链接。$confirmMessage 是一个非常有用的参数,很多时候我们需要点击超链接后弹出一个提醒或者是确认信息,而这个参数就是用来定义该弹出信息内容的。
tableHeaders(array $names, array $tr_options, array $th_options);
创建指定格式的 table 表头
tableCells(array $data, array $odd_tr_options, array $even_tr_options);
创建指定格式的单元格。
guiListTree(array $data, array $htmlAttributes, string $bodyKey = 'body', string $childrenKey = 'children', boolean $return = false);
创建一个内嵌的 <ul> 列表
表单与校验
假定我们有一个 Note model,需要创建一个 controller,以及建立一个视图来新增和修改 Note 信息。
controller 代码:
function edit($id)
{
if (!empty($this->data['Note'])){
if ($this->Note->save($this->data['Note'])){
$this->flash('Your information has been saved.', '/notes/edit/' . $id);
exit();
} else {
$this->validateErrors($this->Note);
$this->render();
}
}
$this->set('note', $this->Note->find("id = $id"));
$this->render();
}
view 代码:
<?php echo $html->formTag('/notes/edit/' . $html->tagValue('Note/id')?>
<table cellpadding="10" cellspacing="0">
<tr>
<td align="right">Body: </td>
<td>
<?php
echo $html->textarea('Note/body', array('cols'=>'60', 'rows'=>'10'));
?>
<?php
echo $html->tagErrorMsg('Note/body','Please enter in a body for this note.');
?>
</td>
</tr>
<tr>
<td></td>
<td>
<?php echo $html->hiddenTag('Note/id')?>
<?php echo $html->hiddenTag('note/submitter_id', $this->controller->Session->read('User.id'))?>
</td>
</tr>
</table>
<?php echo $html->submit()?>
</form>
所有 HTML helper 可以生成的 form tag
submit(string $buttonCaption, array $htmlAttributes, boolean $return = false);
password(string $fieldName, array $htmlAttributes, boolean $return = false);
textarea(string $fieldName, array $htmlAttributes, boolean $return = false);
checkbox(string $fieldName, array $htmlAttributes, boolean $return = false);
file(string $fieldName, array $htmlAttriutes, boolean $return = false);
hidden(string $fieldName, array $htmlAttributes boolean $return = false);
input(string $fieldName, array $htmlAttributes, boolean $return = false);
radio(string $fieldName, array $options, array $inbetween, array $htmlAttributes, boolean $return = false);
tagErrorMsg(string $fieldName, string $message);
AJAX Helper
Cake Ajax helper 使用了最为流行的 Prototype 和 Scriptaculous 两个JS库来完成 Ajax 操作和客户端特效。
为了使用 AJAX Helper ,需要下载最新的 Scriptaculous 库并放置在 /app/webroot/js/ 下面。任何使用 AJAX Helper 的页面都能使用该类库。
大部分 AJAX Helper 中的函数都需要一个特别的参数 $option, $option 是一个 array,可以定义 Ajax 操作各个选项。
$option['url'] //Ajax 调用的 action 的 URL。
$option['frequency'] //remoterTimer() 或 observerField() 调用间隔
$option['update'] //根据 Ajax 调用结果去更新内容的元素 DOM ID
$option['with'] //根据指定的 ID 将元素 serialize 后随 Ajax Form 一起提交
$option['type'] //决定调用的方法是异步还是同步的
$option['loading'] //当远程文档被浏览器载入时的回调函数
$option['loaded'] //当远程文档被浏览器载入完毕后的回调函数
$option['interactive'] //当用户可以和远程文档交互时的回调函数,忽略是否被载入完毕
$option['complete'] //XMLHttpRequest 调用完成时的回调函数
$option['confirm'] //在发起一个 XMLHttpRequest 前弹出的确认窗口
$option['condition'] //XMLHttpRequest 初始化前的判断条件
$option['before'] //XMLHttpRequest 初始化前调用的JS代码
$option['after'] //在XMLHttpRequest 初始化完成但 'loading' 之前立即被执行的 JS 代码
link(string $title, string $href, array $options, boolean $confirm, boolean $escapeTitle);
显示一个超链接,$title 文本,通过 $options['url'] 获取远程内容并更新 $option['update'] 元素内容,回调函数可以使用。
remoteFunction(array $options);
这个函数创建远程调用所必须的 javascript。主要用来作为 linkToRemote 的基础函数。
remoteTimer(array $options);
以 $options['frequency'] 为频率,周期性的调用 $options['url'] 定义的远程 action。
form(string $action, string $type, array $options);
返回一个 form tag 来提交到 $action,使用 XMLHttpRequest 在后台提交代替原来页面刷新式的提交方式。提交完成后根据回发的内容来更新 $option['update'] 指定的元素。回调函数可以使用。
observeField(string $field_id, array $options)
根据 $options['frequency'] 定义的频率侦测 $field_id 所指定的元素内容是否发生变化,如果发生变化调用 $options['url'] 所指定的action。
observeForm(string $form_id, array $options);
侦测 $form_id 的 form 内容是否有变化。
autoComplete(string $field, string $url, array $options);
autoComplete 函数会根据参数创建一个文本框,并且当你键入内容时会显示一个DIV包含有自动完成内容供你选择。
drag(string $id, array $options);
使 $id 指定的元素具有拖拽能力。可以通过 $options 来指定一些附加的选项:
$options['handle']
//(v1.0)可拖拽元素句柄
//(v1.5)在1.5中这个参数可以为一个 CSS class的名称,即可以使用一个字符串。通过该 CSS class 名称匹配成功的第一个节点作为句柄参数传入。
$options['revert]
//(v1.0)当设为 true 时,拖拽动作停止后元素自动回到原始的位置。
//(v1.5)revert参数也可以是一个函数引用,当拖拽动作停止时触发。
$options['constraint']
//可设置为 horizontal(水平) 或 vertical(垂直),拖拽动作会限制在水平或垂直方向上。
drop(string $id, array $option);
使 $id 所指定的元素具备拖放的能力。
$options['accept]'
// 这个参数可以为 string 或者是 JavaScript string 数据,包含了 CSS class名称。具备拖放能力的元素只接受应用这些 CSS class的拖拽元素。
$options['containment']
// 这个参数可以是单个元素句柄或者是元素数组,具备拖放能力的元素只接受被包含在这些元素中的拖拽元素。
$options['overlap']
// 这个参数可以设为 horizontal(水平)或 vertical(垂直),可拖放元素只会在拖拽元素和自己在 指定方向上重叠面积超过50%的情况下响应该动作。
dropRemote(string $id, array $options, array $ajaxOptions);
创建一个拖放元素并为之初始化一个 XMLHttpRequest,当一个拖拽元素被拖放至此时,触发一个 Ajax 动作。
sortable(string $id, array $options);
这个函数可以让一个 list 对象或者是一组 floated 对象可以被排序。
editor(string $id, string $url, array $options);
这个函数通过 $id 所提供的 DOM id,为指定的元素创建一个 in-place(现场)Ajax编辑框。函数执行后,当鼠标悬停该元素时该元素会高亮显示,当点击该元素时会变成一个单行文本编辑框。$url 参数指定了编辑完成后提交的 Action。Action会返回更新后的元素的内容。
javascript Helper
codeBlock(string $string);
将 $stirng 传入的代码包含在 <script> 标记内返回。
link(string $url);
返回一个 javascript 标记指向 $url 所指定的脚本引用地址。
linkOut(string $url);
和 link() 功能一样,但假定 $url 和当前应用程序不在同一个域下面。
escapeScript(string $script);
去除 javascript 代码中的回车、单引号和双引号。
event(string $object, string $event, string $observer, boolean $useCapture);
使用 Prototype 库中的方法来为元素添加一个事件。
cacheEvents
缓存由 event() 创建的 JavaScript 事件。
writeEvents
输出 cacheEvents() 缓存起来的事件代码。
Number Helper
precision(mixed $number, int $precision = 3);
指定传入的参数 $number 的精度为 $precision,并返回。
toReadableSize(int $sizeInBytes);
将传入的 byte 数值转换为具备更高可读性的数值单位。
toPercentage(mixed $number, int $precision = 2);
将传入的数值格式化为相应的百分比形式并返回。
Text Helper
highlight(sting $text, string $highlighter = '<span class="highlight">\1</spa