Yii格式化


要以可讀格式來顯示資料,可以使用 格式化(formatter)應用程式元件。
第1步 - 將 actionFormatter() 方法新增到 SiteController。
public function actionFormatter(){
   return $this->render('formatter');
}
在上面的程式碼中,我們只呈現格式化檢視。
第2步 - 現在,在 views/site 檔案夾內建立 formatter.php 檢視檔案。
<?php
   $formatter = \Yii::$app->formatter;
   // output: January 1, 2016
   echo $formatter->asDate('2019-10-01', 'long'),"<br>";
   // output: 51.50%
   echo $formatter->asPercent(0.515, 2),"<br>";
   // output: <a href = "mailto:[email protected]">[email protected]</a>
   echo $formatter->asEmail('[email protected]'),"<br>";
   // output: Yes
   echo $formatter->asBoolean(true),"<br>";
   // output: (Not set)
   echo $formatter->asDate(null),"<br>";
?>
第3步 - 存取URL:http://localhost:8080/index.php?r=site/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  檢視。

<?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 ,就會看到下面的輸出。

日期格式

另外還有四個日期格式的快捷方式:short, medium, long 和 full 

第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,,將會看到下面的輸出。

數位格式

格式化元件支援數位有關下列格式-
輸出格式 範例
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格式化

其他格式

Yii也可以支援其他格式 -
  • text ? 值是HTML編碼

  • raw ? 值是被輸出的

  • paragraphs ? 值被格式化為HTML文字段落,並包裹成p標籤

  • ntext ? 值被格式化為一個HTML純文字換行,新行的地方被轉換成換行符

  • html ? 值是使用 HtmlPurifier 純化避免 XSS 攻擊

  • image ? 值被格式化為影象標記

  • boolean ? 值被格式化為一個布林值

  • url ? 值被格式化為一個連結

  • email ? 值被格式化為一個 mailto 連結

格式化可以使用當前活動的語言環境來確定如何格式化指定國家格式的值。
下面的例子說明如何在不同的語言環境格式化日期。
<?php
   Yii::$app->formatter->locale = 'ru-RU';
   echo Yii::$app->formatter->asDate('2020-01-01'); // output: 1 января 2020 г.
   Yii::$app->formatter->locale = 'de-DE';
   // output: 1. Januar 2016
   echo Yii::$app->formatter->asDate('2018-01-01');
   Yii::$app->formatter->locale = 'en-US';
   // output: January 1, 2016
   echo Yii::$app->formatter->asDate('2018-01-01');
?>