Yii - 格式化

要以可读格式显示数据,可以使用 formatter 应用程序组件。

步骤 1 − 将 actionFormatter 方法添加到 SiteController

public function actionFormatter(){
    return $this->render('formatter');
}

在上面的代码中,我们仅渲染 formatter 视图。

步骤 2 −现在,在 views/site 文件夹 中创建一个 formatter.php 视图文件。

<?php
$formatter = \Yii::$app->formatter;
    // 输出:2016 年 1 月 1 日
    echo $formatter->asDate('2016-01-01', 'long'),"<br>";
    // 输出:51.50%
    echo $formatter->asPercent(0.515, 2),"<br>";
    // 输出:<a href = "mailto:test@test.com">test@test.com</a>
    echo $formatter->asEmail('test@test.com'),"<br>";
    // 输出:Yes
    echo $formatter->asBoolean(true),"<br>";
    // 输出: (Not set)
    echo $formatter->asDate(null),"<br>";
?>

步骤 3 − 转到 http://localhost:8080/index.php?r=site/formatter,您将看到以下输出。

查看文件

formatter 组件支持以下与日期和时间相关的格式 −

输出格式 示例
date January 01, 2016
time 16:06
datetime January 01, 2016 16:06
timestamp 1512609983
relativeTime 1 hour ago
duration 5 minutes

步骤 4 − 以此方式修改 formatter 视图。

<?php
   $formatter = \Yii::$app->formatter;
   echo $formatter->asDate(date('Y-m-d'), 'long'),"<br>";
   echo $formatter->asTime(date("Y-m-d")),"<br>";
   echo $formatter->asDatetime(date("Y-m-d")),"<br>";

   echo $formatter->asTimestamp(date("Y-m-d")),"<br>";
   echo $formatter->asRelativeTime(date("Y-m-d")),"<br>";
?>

步骤 5 − 在 Web 浏览器的地址栏中输入 http://localhost:8080/index.php?r=site/formatter,您将看到以下输出。

Formatter Output

日期格式

还有四种日期格式快捷方式:短、中、长和全

步骤 1 − 以这种方式修改 formatter 视图文件。

<?php
   $formatter = \Yii::$app->formatter;
   echo $formatter->asDate(date('Y-m-d'), 'short'),"<br>";
   echo $formatter->asDate(date('Y-m-d'), 'medium'),"<br>";
   echo $formatter->asDate(date('Y-m-d'), 'long'),"<br>";
   echo $formatter->asDate(date('Y-m-d'), 'full'),"<br>";
?>

步骤 2 − 如果您转到 Web 浏览器并输入 http://localhost:8080/index.php?r=site/formatter,您将看到以下输出。

数据格式输出

数字格式

formatter 组件支持与数字相关的以下格式 −

输出格式 示例
integer 51
decimal 105.51
percent 51%
scientific 1.050000E+2
currency $105
size 105 bytes
shortSize 105 B

步骤 1 − 以此方式修改 formatter 视图。

<?php
   $formatter = \Yii::$app->formatter;
   echo Yii::$app->formatter->asInteger(105),"<br>";
   echo Yii::$app->formatter->asDecimal(105.41),"<br>";
   echo Yii::$app->formatter->asPercent(0.51),"<br>";
   echo Yii::$app->formatter->asScientific(105),"<br>";
   echo Yii::$app->formatter->asCurrency(105, "$"),"<br>";
   echo Yii::$app->formatter->asSize(105),"<br>";
   echo Yii::$app->formatter->asShortSize(105),"<br>";
?>

步骤 2 − 转到 http://localhost:8080/index.php?r=site/formatter,您将看到以下输出。

数字格式输出

其他格式

Yii 还支持其他格式 −

  • text − 该值是 HTML 编码的。

  • raw − 该值按原样输出。

  • paragraphs − 该值被格式化为 HTML 文本段落,并包装在 p 标签中。

  • ntext −该值被格式化为 HTML 纯文本,其中换行符被转换为换行符。

  • html − 该值使用 HtmlPurifier 净化以避免 XSS 攻击。

  • image − 该值被格式化为图像标签。

  • boolean − 该值被格式化为布尔值。

  • url − 该值被格式化为链接。

  • email − 该值被格式化为 mailto-link。

格式化程序可以使用当前活动的区域设置来确定如何为特定国家/地区格式化值。

以下示例显示如何为不同的区域设置格式化日期。

<?php
   Yii::$app->formatter->locale = 'ru-RU';
   echo Yii::$app->formatter->asDate('2016-01-01'); // output: 1 января 2016 г.
   Yii::$app->formatter->locale = 'de-DE';
   // output: 1. Januar 2016
   echo Yii::$app->formatter->asDate('2016-01-01');
   Yii::$app->formatter->locale = 'en-US';
   // output: January 1, 2016
   echo Yii::$app->formatter->asDate('2016-01-01');
?>