标签(视图助手)¶
注意
Phalcon\Tag将在未来版本的 Phalcon 中被移除。该功能由以下组件提供:Phalcon\Html\TagFactory组件定义的。
概览¶
编写和维护 HTML 标记可能很快变成一项繁琐的任务,因为必须考虑命名约定和众多属性。Phalcon\Tag组件通过提供生成 HTML 标记的视图助手来处理这种复杂性。
该组件可以在纯 HTML+PHP 视图或在Volt模板中使用。
注意
它提供的功能与Phalcon\Html\TagFactory相同。在未来的版本中,该组件将被TagFactory所替代。这两个组件同时存在的原因是给开发人员尽可能多的时间去适应他们的代码,因为 HTML 生成涉及应用程序中的很多区域,尤其是视图部分。
文档类型¶
您可以使用setDocType()来为您的页面设置文档类型。<doctype>该方法接受一个可用常量,生成所需的 HTML。此方法返回的是Tag组件,因此调用可以链式调用。
HTML32HTML401_STRICTHTML401_TRANSITIONALHTML401_FRAMESETHTML5XHTML10_STRICTXHTML10_TRANSITIONALXHTML10_FRAMESETXHTML11XHTML20XHTML5
上面的例子会产生:
默认值是HTML5它将生成:
您可以在视图中使用getDocType()输出文档类型:
或者在 Volt 中:
标题¶
Phalcon\Tag提供了多种方法来设置发送给用户页面或 HTML 的标题标签。可用的方法如下:
appendTitle()¶
 在当前标题后面追加文本。该方法接受一个string或者一个array.
注意
如果提供了string,它会被添加到内部集合中用于保存追加标题文本。然而,如果您提供了一个array内部集合将被替换。
<?php
use Phalcon\Tag;
Tag::setTitle('Phalcon');
echo Tag::getTitle(); // 'Phalcon'
Tag::appendTitle(' Framework');
Tag::appendTitle(' Rocks');
echo Tag::getTitle(); // 'Phalcon Framework Rocks'
Tag::appendTitle('Will be replaced');
Tag::appendTitle(
    [
        ' Framework',
        ' Rocks',
    ]
);
echo Tag::getTitle(); // 'Phalcon Framework Rocks'
friendlyTitle()¶
 将文本转换为 URL 友好型字符串。它接受以下参数: -text- 要处理的文本 -parameters- 参数数组以生成友好标题
参数可以是: -lowercase - bool是否将所有内容转为小写 -separator - string- 分隔符,默认为- - replace - array- 键值对,用来替换字符。这将使用 [str_replace][str_replace] 内部进行替换
<?php
use Phalcon\Tag;
echo Tag::friendlyTitle('Phalcon Framework'); 
// 'Phalcon-Framework';
echo Tag::friendlyTitle(
    'Phalcon Framework',
    [
        'separator' => '_',
        'lowercase' => true,
    ]
); // 'phalcon_framework
echo Tag::friendlyTitle(
    'Phalcon Framework',
    [
        'separator' => '_',
        'lowercase' => true,
        'replace'   => [
            'a' => 'x',
            'e' => 'x',
            'o' => 'x',
        ] 
    ]
); // 'phxlcxn_frxmxwxrk
getTitle()¶
 返回当前标题。标题会自动进行转义。该方法接受两个参数: -prepend - bool是否输出通过prependTitle() - append - bool是否输出通过appendTitle()
这两个参数默认都是true。
<?php
use Phalcon\Tag;
Tag::setTitleSeparator(' ');
Tag::prependTitle('Hello');
Tag::setTitle('World');
Tag::appendTitle('from Phalcon');
echo Tag::getTitle();             // 'Hello World from Phalcon';
echo Tag::getTitle(false);        // 'World from Phalcon';
echo Tag::getTitle(true, false);  // 'Hello World';
echo Tag::getTitle(false, false); // 'World';
getTitleSeparator()¶
 返回当前标题分隔符。默认值为空字符串。
prependTitle()¶
 在当前标题前添加文本。该方法接受一个string或者一个array.
注意
如果提供了string,它会被添加到内部集合中用于保存前面标题文本。然而,如果您提供了一个array内部集合将被替换。
<?php
use Phalcon\Tag;
Tag::setTitle('Rocks');
echo Tag::getTitle(); // 'Rocks'
Tag::prependTitle('Phalcon ');
Tag::prependTitle('Framework ');
echo Tag::getTitle(); // 'Phalcon Framework Rocks'
Tag::prependTitle('Will be replaced');
Tag::prependTitle(
    [
        'Phalcon ',
        'Framework ',
    ]
);
echo Tag::getTitle(); // 'Phalcon Framework Rocks'
renderTitle()¶
 返回包含在<title>标签内的当前标题。标题会自动进行转义。该方法接受两个参数: -prepend - bool是否输出通过prependTitle() - append - bool是否输出通过appendTitle()
这两个参数默认都是true。
<?php
use Phalcon\Tag;
Tag::setTitleSeparator(' ');
Tag::prependTitle('Hello');
Tag::setTitle('World');
Tag::appendTitle('from Phalcon');
echo Tag::renderTitle();             
// '<title>Hello World from Phalcon</title>';
echo Tag::renderTitle(false);        
// '<title>World from Phalcon</title>';
echo Tag::renderTitle(true, false);  
// '<title>Hello World</title>';
echo Tag::renderTitle(false, false); 
// '<title>World</title>';
setTitle()¶
 设置标题文本。
setTitleSeparator()¶
 设置标题的分隔符。
输入¶
checkField()¶
 构建一个HTMLinput[type='check']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::checkField(
    [
        'terms',
        'value' => 'Y',
    ]
);
// <input type='checkbox' id='terms' name='terms' value='Y' />
HTML 语法:
Volt 语法:
colorField()¶
 构建一个HTMLinput[type='color']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::colorField(
    [
        'background',
        'class' => 'myclass',
    ]
);
// <input type='color' id='background' name='background' class='myclass' />
HTML 语法:
Volt 语法:
dateField()¶
 构建一个HTMLinput[type='date']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::dateField(
    [
        'born',
        'value' => '1980-01-01',
    ]
);
// <input type='date' id='born' name='born' value='1980-01-01' />
HTML 语法:
Volt 语法:
dateTimeField()¶
 构建一个HTMLinput[type='datetime']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::dateTimeField(
    [
        'born',
        'value' => '1980-01-01 01:02:03',
    ]
);
// <input type='datetime' id='born' name='born' 
//        value='1980-01-01 01:02:03' />
HTML 语法:
Volt 语法:
dateTimeLocalField()¶
 构建一个HTMLinput[type='datetime-local']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::dateTimeLocalField(
    [
        'born',
        'value' => '1980-01-01 01:02:03',
    ]
);
// <input type='datetime-local' id='born' name='born' 
//        value='1980-01-01 01:02:03' />
HTML 语法:
Volt 语法:
fileField()¶
 构建一个HTMLinput[type='file']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::fileField(
    [
        'document',
        'class' => 'input',
    ]
);
// <input type='file' id='document' name='document' class='input' />
HTML 语法:
Volt 语法:
hiddenField()¶
 构建一个HTMLinput[type='hidden']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::hiddenField(
    [
        'id',
        'value' => '1234',
    ]
);
// <input type='hidden' id='id' name='id' value='1234' />
HTML 语法:
Volt 语法:
imageInput()¶
 构建一个HTMLinput[type='image']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::imageInput(
    [
        'src' => '/img/button.png',
    ]
);
// <input type='image' src='/img/button.png' />
HTML 语法:
Volt 语法:
monthField()¶
 构建一个HTMLinput[type='month']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::monthField(
    [
        'month',
        'value' => '04',
    ]
);
// <input type='month' id='month' name='month' value='04' />
HTML 语法:
Volt 语法:
numericField()¶
 构建一个HTMLinput[type='number']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::numericField(
    [
        'price',
        'min' => '1',
        'max' => '5',
    ]
);
// <input type='number' id='price' name='price' min='1' max='5' />
HTML 语法:
Volt 语法:
radioField()¶
 构建一个HTMLinput[type='radio']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::radioField(
    [
        'gender',
        'value' => 'Male',
    ]
);
// <input type='radio' id='gender' name='gender' value='Male' />
HTML 语法:
Volt 语法:
rangeField()¶
 构建一个HTMLinput[type='range']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::rangeField(
    [
        'points',
        'min' => '0',
        'max' => '10',
    ]
);
// <input type='range' id='points' name='points' min='0' max='10' />
HTML 语法:
Volt 语法:
searchField()¶
 构建一个HTMLinput[type='search']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::searchField(
    [
        'search',
        'q' => 'startpage',
    ]
);
// <input type='search' id='search' name='search' q='startpage' />
HTML 语法:
Volt 语法:
submitButton()¶
 构建一个HTMLinput[type='submit']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::submitButton(
    [
        'Save',
    ]
);
// <input type='submit' value='Save' />
HTML 语法:
Volt 语法:
telField()¶
 构建一个HTMLinput[type='tel']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::telField(
    [
        'mobile',
        'size' => '12',
    ]
);
// <input type='tel' id='mobile' name='mobile' size='12' />
HTML 语法:
Volt 语法:
passwordField()¶
 构建一个HTMLinput[type='text']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::textField(
    [
        'name',
        'size' => '30',
    ]
);
// <input type='text' id='name' name='name' size='30' />
HTML 语法:
Volt 语法:
timeField()¶
 构建一个HTMLinput[type='time']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::timeField(
    [
        'start',
        'size' => '5',
    ]
);
// <input type='time' id='start' name='start' size='5' />
HTML 语法:
Volt 语法:
urlField()¶
 构建一个HTMLinput[type='url']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::urlField(
    [
        'homepage',
    ]
);
// <input type='url' id='homepage' name='homepage' />
HTML 语法:
Volt 语法:
weekField()¶
 构建一个HTMLinput[type='week']标签。接受一个包含元素属性的数组。数组的第一个元素是元素的名称。
<?php
use Phalcon\Tag;
echo Tag::weekField(
    [
        'week',
        'size' => '2',
    ]
);
// <input type='week' id='week' name='week' size='2' />
HTML 语法:
Volt 语法:
元素¶
image()¶
 构建一个HTML图片标签。接受一个包含元素属性的数组。数组的第一个元素是元素的源地址(src)。该方法接受第二个布尔参数,用于表示此资源是否为本地资源。
<?php
use Phalcon\Tag;
echo Tag::image(
    [
       'img/hello.gif',
       'alt' => 'alternative text',
    ]
);
// <img alt='alternative text' src='/your-app/img/hello.gif'>
echo Tag::image(
   'https://static.mywebsite.com/img/bg.png',
    false
);
// <img src='https://static.mywebsite.com/img/bg.png'>
HTML 语法:
<?php echo $this->tag->image(
    [
       'img/hello.gif',
       'alt' => 'alternative text',
    ]
); ?>
<?php echo $this->tag->image(
   'https://static.mywebsite.com/img/bg.png',
    false
); ?>
Volt 语法:
{{ image('img/hello.gif', 'alt': 'alternative text') }}
{{ image('https://static.mywebsite.com/img/bg.png', false) }}
select()¶
 select()是一个辅助方法,允许你根据一个<select>元素来创建Phalcon\Mvc\Model结果集生成HTML。你需要在依赖注入容器中设置有效的数据库连接,以便此方法生成正确的HTML。组件需要参数和数据进行操作。 -parameters - string/array。如果传递的是字符串,则它将是元素的名称。如果传递的是数组,则数组的第一个元素将是元素的名称。可用参数包括: -id - string- 设置元素的id -using - array - 必需一个两个元素的数组,定义模型的键字段和值字段以填充选择框(select)useEmpty - bool- 默认值为false。如果设置了该选项,它将在选择框(select)中添加一个空选项 -emptyText - string- 要为空选项显示的文本(例如:请选择一个选项) -emptyValue - string/number- 为空选项分配的值 - 以键/值格式提供的其他HTML属性 -data - Resultset来自模型操作的结果集。
<?php
use MyApp\Constants\Status;
use MyApp\Models\Invoices;
use Phalcon\Tag;
$resultset = Invoices::find(
    [
        'conditions' => 'inv_status_flag = :status:',
        'bind'       => [
            'status' => Status::UNPAID,
        ]
    ]
);
echo Tag::select(
    [
        'invoiceId',
        $resultset,
        'using'      => [
            'inv_id', 
            'inv_title',
        ],
        'useEmpty'   => true,
        'emptyText'  => 'Choose an Invoice to pay',
        'emptyValue' => '0',
    ]
);
// <select id='invoiceId' name='invoiceId'>
//     <option value='0'>Choose an Invoice to pay</option>
//     <option value='24'>Chocolates 24oz box</option>
//     <option value='77'>Sugar 1 bag</option>
// </select>
HTML 语法:
<?php echo $this->tag->select(
    [
        'invoiceId',
        $resultset,
        'using'      => [
            'inv_id', 
            'inv_title',
        ],
        'useEmpty'   => true,
        'emptyText'  => 'Choose an Invoice to pay',
        'emptyValue' => '0',
    ]
); ?>
Volt 语法:
{{ select(
    [
        'invoiceId',
        $resultset,
        'using'      : [
            'inv_id', 
            'inv_title',
        ],
        'useEmpty'   : true,
        'emptyText'  : 'Choose an Invoice to pay',
        'emptyValue' : '0',
    ]
) }}
selectStatic()¶
 此助手与select()类似,但它使用PHP数组作为数据源。组件需要参数和数据进行操作。 -parameters - string/array。如果传递的是字符串,则它将是元素的名称。如果传递的是数组,则数组的第一个元素将是元素的名称。可用参数包括: -id - string- 设置元素的id -useEmpty - bool- 默认值为false。如果设置了该选项,它将在选择框(select)中添加一个空选项 -emptyText - string- 要为空选项显示的文本(例如:请选择一个选项) -emptyValue - string/number- 为空选项分配的值 - 以键/值格式提供的其他HTML属性 -data - array包含键作为ID和值作为文本的数据数组
<?php
use MyApp\Constants\Status;
use MyApp\Models\Invoices;
use Phalcon\Tag;
$resultset = [
    24 => 'Chocolates 24oz box',
    77 => 'Sugar 1 bag',
];
echo Tag::selectStatic(
    [
        'invoiceId',
        $resultset,
        'useEmpty'   => true,
        'emptyText'  => 'Choose an Invoice to pay',
        'emptyValue' => '0',
    ]
);
// <select id='invoiceId' name='invoiceId'>
//     <option value='0'>Choose an Invoice to pay</option>
//     <option value='24'>Chocolates 24oz box</option>
//     <option value='77'>Sugar 1 bag</option>
// </select>
HTML 语法:
<?php echo $this->tag->selectStatic(
    [
        'invoiceId',
        $resultset,
        'useEmpty'   => true,
        'emptyText'  => 'Choose an Invoice to pay',
        'emptyValue' => '0',
    ]
); ?>
Volt 语法:
{{ select(
    [
        'invoiceId',
        $resultset,
        'useEmpty'   : true,
        'emptyText'  : 'Choose an Invoice to pay',
        'emptyValue' : '0',
    ]
) }}
tagHtml()¶
 Phalcon提供了一个通用的HTML助手,允许生成任何类型的HTML元素。开发者有责任为助手提供一个合法的HTML元素名称。配套的tagHtmlClose()可用于在必要时关闭标签。接受以下参数 -
The tagHtml() accepts the following parameters - name - string- 元素的名称 -attributes - array- 任意属性 -selfClose - bool- 是否为自闭合元素 -onlyStart - bool- 是否只生成标签的开始部分(例如:开始部分,而不是结束部分)<tag>或者<tag></tag>) -useEol - bool- 是否在生成的字符串末尾添加一个PHP_EOL at the end of the generated string or not
<?php
use Phalcon\Tag;
echo Tag::tagHtml(
    'canvas', 
    [
        'id'    => 'canvas1', 
        'width' => '300', 
        'class' => 'cnvclass',
    ], 
    false, 
    true, 
    true
);
echo 'This is my canvas';
echo Tag::tagHtmlClose('canvas');
// <canvas id='canvas1' width='300' class='cnvclass'>
// This is my canvas
// </canvas>
HTML 语法:
<?php 
echo $this->tag->tagHtml(
    'canvas', 
    [
        'id'    => 'canvas1', 
        'width' => '300', 
        'class' => 'cnvclass',
    ], 
    false, 
    true, 
    true
);
echo 'This is my canvas';
echo $this->tag->tagHtmlClose('canvas'); 
?>
Volt 语法:
{{ tag_html('canvas', ['id': 'canvas1', width': '300', 'class': 'cnvclass'], false, true, true) }}
    This is my canvas
{{ tag_html_close('canvas') }}
资源管理¶
Phalcon\Tag提供了帮助方法来生成样式表和JavaScript HTML标签。
stylesheetLink()¶
 第一个参数是一个string或者一个array,这是构造元素所需的参数。第二个参数是一个布尔值,决定链接是指向本地资源还是远程资源。
<?php
use Phalcon\Tag;
echo Tag::stylesheetLink('css/style.css');
// <link rel='stylesheet' href='/css/style.css'>
echo Tag::stylesheetLink(
    'https://fonts.googleapis.com/css?family=Rosario',
    false
);
// <link rel='stylesheet' 
//       href='https://fonts.googleapis.com/css?family=Rosario' 
//       type='text/css'>
echo Tag::stylesheetLink(
    [
        'href'  => 'https://fonts.googleapis.com/css?family=Rosario',
        'class' => 'some-class',
    ],
    false
);
// <link rel='stylesheet' 
//       href='https://fonts.googleapis.com/css?family=Rosario' 
//       type='text/css'>
HTML语法
<?php echo $this->tag->stylesheetLink('css/style.css'); ?>
<?php 
echo $this->tag->stylesheetLink(
    'https://fonts.googleapis.com/css?family=Rosario',
    false
); ?>
<?php 
echo $this->tag->stylesheetLink(
    [
        'href'  => 'https://fonts.googleapis.com/css?family=Rosario',
        'class' => 'some-class',
    ],
    false
); ?>
Volt语法:
{{ stylesheet_link('css/style.css') }}
{{ stylesheet_link(
        'https://fonts.googleapis.com/css?family=Rosario', 
        false
    ) 
}}
{{ stylesheet_link(
        [
            'href'  : 'https://fonts.googleapis.com/css?family=Rosario',
            'class' : 'some-class',
        ],
        false
    ) 
}}
javascriptInclude()¶
 第一个参数是一个string或者一个array,这是构造元素所需的参数。第二个参数是一个布尔值,决定链接是指向本地资源还是远程资源。
<?php
use Phalcon\Tag;
echo Tag::javascriptInclude('js/jquery.js');
// <script src='/js/jquery.js' type='text/javascript'></script>
echo Tag::javascriptInclude(
    'https://code.jquery.com/jquery/jquery.min.js',
    false
);
// <script src='https://code.jquery.com/jquery/jquery.min.js' 
//         type='text/javascript'></script>
echo Tag::javascriptInclude(
    [
        'src'  => 'https://code.jquery.com/jquery/jquery.min.js',
        'type' => 'application/javascript',
    ],
    false
);
// <script src='https://code.jquery.com/jquery/jquery.min.js' 
//         type='application/javascript'></script>
HTML语法
<?php echo $this->tag->javascriptInclude('js/jquery.js'); ?>
<?php 
echo $this->tag->javascriptInclude(
    'https://fonts.googleapis.com/css?family=Rosario',
    false
); ?>
<?php 
echo $this->tag->javascriptInclude(
    [
        'src'  => 'https://code.jquery.com/jquery/jquery.min.js',
        'type' => 'application/javascript',
    ],
    false
); ?>
Volt语法:
{{ javascript_include('js/jquery.js') }}
{{ javascript_include(
        'https://code.jquery.com/jquery/jquery.min.js', 
        false
    ) 
}}
{{ javascript_include(
        [
            'src'  : 'https://code.jquery.com/jquery/jquery.min.js',
            'type' : 'application/javascript',
        ],
        false
    ) 
}}
链接¶
在任何Web应用中,显示帮助用户从一个区域导航到另一个区域的链接是一项常见任务。Phalcon\Tag提供了linkTo()来帮助完成这项任务。该方法接受三个参数。 -parameters - array/string- 元素的属性和参数。如果传递的是字符串,则它将被视为链接的目标URL。如果传递的是数组,则可以发送以下元素: -action- URL。如果action是数组,你可以使用for元素引用你在路由中定义的命名路由。 -query- URL的基础查询 -text- 链接的文本 -local- 此链接是否为本地或远程链接 - 用于链接的额外的键/值属性 -text - string- 链接的文本 -local - bool- 此链接是否为本地或远程链接
<?php
use Phalcon\Tag;
echo Tag::linkTo('signup/register', 'Register Here!');
// <a href='/signup/register'>Register Here!</a>
echo Tag::linkTo(
    [
        'signup/register',
        'Register Here!',
        'class' => 'btn-primary',
    ]
);
// <a href='/signup/register' class='btn-primary'>Register Here!</a>
echo Tag::linkTo('https://phalcon.io/', 'Phalcon', false);
// <a href='https://phalcon.io/'>Phalcon</a>
 echo Tag::linkTo(
    [
        'https://phalcon.io/',
        'Phalcon Home',
        false,
    ]
);
// <a href='https://phalcon.io/'>Phalcon Home</a>
HTML 语法:
<?php 
echo $this->tag->linkTo('signup/register', 'Register Here!');
echo $this->tag->linkTo(
    [
        'signup/register',
        'Register Here!',
        'class' => 'btn-primary',
    ]
);
echo $this->tag->linkTo('https://phalcon.io/', 'Phalcon', false);
 echo $this->tag->linkTo(
    [
        'https://phalcon.io/',
        'Phalcon Home',
        false,
    ]
);
?>
Volt 语法:
{{ link_to('signup/register', 'Register Here!') }}
{{ link_to(
    'signup/register',
    'Register Here!',
    'class': 'btn-primary'
) }}
{{ link_to('https://phalcon.io/', 'Phalcon', false) }}
{{ link_to(
    'https://phalcon.io/',
    'Phalcon Home',
    false
) }}
如果你定义了命名路由,可以在参数数组中使用for关键字来引用它。Phalcon\Tag将在内部解析路由,并使用Phalcon\Url.
<?php
use Phalcon\Tag;
echo Tag::linkTo(
    [
        [   
            'for'   => 'invoice-view', 
            'title' => 12345, 
            'name'  => 'invoice-12345'
        ], 
        'Show Invoice'
    ]
);
HTML 语法:
<?php 
echo $this->tag->linkTo(
    [
        [   
            'for'   => 'invoice-view', 
            'title' => 12345, 
            'name'  => 'invoice-12345'
        ], 
        'Show Invoice'
    ]
);
?>
Volt 语法:
{{ link_to('signup/register', 'Register Here!') }}
{{ link_to(
    [   
        'for'   : 'invoice-view', 
        'title' : 12345, 
        'name'  : 'invoice-12345'
    ], 
    'Show Invoice',
    'class': 'edit-btn'
) }}
表单¶
Forms play an important role in any web application since they are used to collect input from the user. Phalcon\Tag提供了form()和endForm()方法,它们创建<form>元素。
<?php
use Phalcon\Tag;
echo Tag::form(
    [
        '/admin/invoices/create', 
        'method' => 'post',
        'class'  => 'input'
    ]
);
// <form action='admin/invoices/create' method='post' class='input'>
// ...
echo Tag::endForm();
// </form>
HTML 语法:
<?php 
echo $this->tag->form(
    [
        '/admin/invoices/create', 
        'method' => 'post',
        'class'  => 'input'
    ]
);
// ...
echo $this->tag->endForm();
?>
Volt 语法:
Phalcon还提供了一个表单构建器,以面向对象的方式创建表单。
数据¶
setDefault()¶
 你可以使用setDefault()用来预填充由Phalcon\Tag生成的元素的值。此组件的助手会在请求之间保留这些值。这样,你可以在不丢失已输入数据的情况下轻松显示验证信息。每个表单助手都支持value参数。通过它,你可以直接为助手指定一个值。当该参数存在时,任何使用预先设定的值都将被忽略。setDefault()或通过请求设置的值将被忽略。
<?php
use Phalcon\Tag;
Tag::setDefault('framework', 'Phalcon');
echo Tag::textField(
    [
        'framework', 
        'class'  => 'input'
    ]
);
// <input type='text' id='framework' name='framework' 
//        value='Phalcon' class='class' />
setDefaults()¶
 setDefaults()允许你通过传递一个键值数组,为表单中的元素指定多个要设置的值。该方法可以调用多次,每次调用都会覆盖前一次调用所设置的数据。但你可以将第二个参数指定为true以便合并这些值。
<?php
use Phalcon\Tag;
Tag::setDefaults(
    [
        'framework' => 'Phalcon',
        'version'   => '4.0',
    ]
);
echo Tag::textField(
    [
        'framework', 
        'class'  => 'input'
    ]
);
// <input type='text' id='framework' name='framework' 
//        value='Phalcon' class='class' />
echo Tag::textField(
    [
        'version', 
        'class'  => 'input'
    ]
);
// <input type='text' id='version' name='version' 
//        value='4.0' class='class' />
getValue()¶
 此组件中的每个辅助方法都会调用此方法,以检查是否已通过使用setDefault()之前设置过某个元素的值,$_POST超全局变量中。
<?php
use Phalcon\Tag;
Tag::setDefaults(
    [
        'framework' => 'Phalcon',
        'version'   => '4.0',
    ]
);
echo Tag::getValue('framework'); // 'Phalcon'
$_POST = [
    'framework' => 'Phalcon',
    'version'   => '4.0',
];
echo Tag::getValue('framework'); // 'Phalcon'
hasValue()¶
 该方法会检查某个value元素中的值是否已经通过setDefault()设置,或者是否存在于$_POST超全局变量中。
<?php
use Phalcon\Tag;
Tag::setDefaults(
    [
        'framework' => 'Phalcon',
        'version'   => '4.0',
    ]
);
echo Tag::hasValue('framework'); // 'true'
$_POST = [
    'framework' => 'Phalcon',
    'version'   => '4.0',
];
echo Tag::hasValue('framework'); // 'true'
转义¶
Phalcon\Tag自动转义提供给其辅助方法的文本内容。如果你的应用有需要,可以通过使用setAutoEscape().
<?php
use Phalcon\Tag;
echo Tag::textField(
    [
        'framework',
        'value' => '<h1>hello</h1>', 
    ]
);
// <input type="text" id="framework" name="framework" 
//        value="<h1>hello</h1>" />
Tag::setAutoescape(false);
echo Tag::textField(
    [
        'framework',
        'value' => '<h1>hello</h1>', 
    ]
);
// <input type="text" id="framework" name="framework" 
//        value="<h1>hello</h1>" />
依赖注入¶
如果您使用Phalcon\Di\FactoryDefault容器,Phalcon\Tag已经为您以名称tag.
注册。下面是一个注册服务以及访问它的示例:
直接输出
<?php
use Phalcon\Di\Di;
use Phalcon\Tag;
$container = new Di();
$container->set(
    'tag',
    function () use  {
        return new Tag();
    }
);
来始终实现你自己的tag辅助类,并在 Di 容器中替换tag进行注册。
从任何实现了Phalcon\Di\Injectable接口的组件访问服务,tag属性一样简单。
<?php
use Phalcon\Mvc\Controller;
use Phalcon\Tag;
/**
 * @property Tag $tag
 */
class SessionController extends Controller
{
    public function indexAction()
    {
        $this->tag->setTitle('Phalcon Framework');
    }
}
自定义¶
你可以轻松扩展此功能并创建你自己的辅助方法。
- 首先,在你的应用程序文件系统中创建一个新目录来存放辅助文件。
 - 命名时选择一个能代表用途的名称。例如,在本例中我们使用的是
customhelpers. - 创建一个名为
MyTags.php中更改了customhelpers目录下。 - 的文件。Phalcon\Tag类并实现你自己的方法。
 
<?php
namespace MyApp;
use Phalcon\Tag;
class MyTags extends Tag
{
    /**
     * Generates a widget to show an HTML5 audio tag
     *
     * @param array
     * @return string
     */
    public static function audioField($parameters)
    {
        // Converting parameters to the array if it is not
        if (true !== is_array($parameters)) {
            $parameters = [$parameters];
        }
        // Determining attributes 'id' and 'name'
        $parameters[0]      = $parameters[0] ?? $parameters['id'];
        $id                 = $parameters[0];
        $parameters['name'] = $parameters['name'] ?? $id;
        // Determining widget value,
        // \Phalcon\Tag::setDefault() allows to set the widget value
        if (true === isset($parameters['value'])) {
            $value = $parameters['value'];
            unset($parameters['value']);
        } else {
            $value = self::getValue($id);
        }
        // Generate the tag code
        $code = sprintf(
            '<audio id="%s" value="%s" ',
            $id,
            $value
        );
        foreach ($parameters as $key => $attributeValue) {
            if (!is_integer($key)) {
                $code .= sprintf('%s="%s" ', $key, $attributeValue);
            }
        }
        $code.=' />';
        return $code;
    }
}
在创建完我们的自定义辅助类后,我们需要从位于 public 目录中的index.php文件里自动加载包含我们辅助类的新目录。
<?php
use Phalcon\Loader\Loader;
use Phalcon\Mvc\Application;
use Phalcon\Di\FactoryDefault();
use Phalcon\Exception as PhalconException;
try {
    $loader = new Loader();
    $loader->setDirectories(
        [
            '../app/controllers',
            '../app/models',
            '../app/customhelpers', // Add the new helpers folder
        ]
    );
    $loader->register();
    $di = new FactoryDefault();
    // Assign our new tag a definition, so we can call it
    $di->set(
        'MyTags',
        function () {
            return new MyTags();
        }
    );
    $application = new Application($di);
    $response = $application->handle(
        $_SERVER['REQUEST_URI']
    );
    $response->send();
} catch (PhalconException $e) {
    echo 'PhalconException: ', $e->getMessage();
}
现在你就可以在视图中使用你自己的辅助方法了:
<?php
echo MyTags::audioField(
    [
        'name' => 'test',
        'id'   => 'audio_test',
        'src'  => '/path/to/audio.mp3',
    ]
);
?>
你还可以查看Volt一个更快的 PHP 模板引擎,在其中你可以使用更符合开发者习惯的语法来使用由Phalcon\Tag.