# 變量輸出
在模板中輸出變量的方法很簡單,例如,在控制器的方法中我們給模板變量賦值:
```
$this->assign('name', 'thinkphp');
return $this->fetch();
```
然后就可以在模板中使用:
```
Hello,{$name}!
```
模板編譯后的結果就是:
```
Hello,<?php echo htmlentities($name);?>!
```
這樣,運行的時候就會在模板中顯示: `Hello,ThinkPHP!`
注意模板標簽的`{`和`$`之間不能有任何的空格,否則標簽無效。所以,下面的標簽
```
Hello,{ $name}!
```
將不會正常輸出name變量,而是直接保持不變輸出: `Hello,{ $name}!`
模板標簽的變量輸出根據變量類型有所區別,剛才我們輸出的是字符串變量,如果是數組變量,
```
$data['name'] = 'ThinkPHP';
$data['email'] = 'thinkphp@qq.com';
$this->assign('data',$data);
```
那么,在模板中我們可以用下面的方式輸出:
```
Name:{$data.name}
Email:{$data.email}
```
或者用下面的方式也是有效:
```
Name:{$data['name']}
Email:{$data['email']}
```
> 當我們要輸出多維數組的時候,往往要采用后面一種方式。
如果`data`變量是一個對象(并且包含有`name`和`email`兩個屬性),那么可以用下面的方式輸出:
```
Name:{$data->name}
Email:{$data->email}
```
也可以直接調用對象的常量或者方法
```
常量:{$data::CONST_NAME}
方法:{$data->fun()}
```
> 如果要輸出模型數據的話,因為模型支持`ArrayAccess`,所以使用數組或者對象方式都可以輸出。
## 使用默認值
我們可以給變量輸出提供默認值,例如:
```
{$user.nickname|default="這家伙很懶,什么也沒留下"}
```
對系統變量依然可以支持默認值輸出,例如:
```
{$Think.get.name|default="名稱為空"}
```
默認值和函數可以同時使用,例如:
```
{$Think.get.name|getName|default="名稱為空"}
```
## 系統變量輸出
普通的模板變量需要首先賦值后才能在模板中輸出,但是系統變量則不需要,可以直接在模板中輸出,系統變量的輸出通常以`{$Think.`(大小寫一致) 打頭,例如:
```
{$Think.server.script_name} // 輸出$_SERVER['SCRIPT_NAME']變量
{$Think.session.user_id} // 輸出$_SESSION['user_id']變量
{$Think.get.page} // 輸出$_GET['page']變量
{$Think.cookie.name} // 輸出$_COOKIE['name']變量
```
支持輸出 `$_SERVER`、`$_ENV`、 `$_POST`、 `$_GET`、 `$_REQUEST`、`$_SESSION`和 `$_COOKIE`變量。
## 常量輸出
還可以輸出常量
```
{$Think.const.PHP_VERSION}
```
或者直接使用
```
{$Think.PHP_VERSION}
```
## 配置輸出
輸出配置參數使用:
```
{$Think.config.default_module}
{$Think.config.default_controller}
```
## 語言變量
輸出語言變量可以使用:
```
{$Think.lang.page_error}
{$Think.lang.var_error}
```
## 請求變量
模板支持直接輸出`Request`請求對象的方法參數,用法如下:
> ### $Request.方法名.參數
例如:
```
{$Request.get.id}
{$Request.param.name}
```
以`$Request.`開頭的變量輸出會認為是系統請求對象的參數輸出。
> 支持`Request`類的大部分方法,但只支持方法的第一個參數。
下面都是有效的輸出:
```
// 調用Request對象的get方法 傳入參數為id
{$Request.get.id}
// 調用Request對象的param方法 傳入參數為name
{$Request.param.name}
// 調用Request對象的param方法 傳入參數為user.nickname
{$Request.param.user.nickname}
// 調用Request對象的root方法
{$Request.root}
// 調用Request對象的root方法,并且傳入參數true
{$Request.root.true}
// 調用Request對象的path方法
{$Request.path}
// 調用Request對象的module方法
{$Request.module}
// 調用Request對象的controller方法
{$Request.controller}
// 調用Request對象的action方法
{$Request.action}
// 調用Request對象的ext方法
{$Request.ext}
// 調用Request對象的host方法
{$Request.host}
// 調用Request對象的ip方法
{$Request.ip}
// 調用Request對象的header方法
{$Request.header.accept-encoding}
```
- 序言
- 基礎
- 安裝
- 開發規范
- 目錄結構
- 配置
- 架構
- 架構總覽
- 入口文件
- URL訪問
- 模塊設計
- 命名空間
- 容器和依賴注入
- Facade
- 鉤子和行為
- 中間件
- 路由
- 路由定義
- 變量規則
- 路由地址
- 閉包支持
- 路由參數
- 路由緩存
- 跨域請求
- 注解路由
- 路由分組
- MISS路由
- 資源路由
- 快捷路由
- 路由別名
- 路由綁定
- 域名路由
- URL生成
- 控制器
- 控制器定義
- 前置操作
- 跳轉和重定向
- 空操作和空控制器
- 分層控制器
- 資源控制器
- 請求
- 請求對象
- 請求信息
- 輸入變量
- 請求類型
- HTTP頭信息
- 偽靜態
- 參數綁定
- 請求緩存
- 響應
- 響應輸出
- 響應參數
- 重定向
- 數據庫
- 連接數據庫
- 查詢構造器
- 查詢數據
- 添加數據
- 更新數據
- 刪除數據
- 查詢表達式
- 鏈式操作
- 聚合查詢
- 時間查詢
- 高級查詢
- 視圖查詢
- JSON字段
- 子查詢
- 原生查詢
- 查詢事件
- 事務操作
- 監聽SQL
- 存儲過程
- 數據集
- 分布式數據庫
- 模型
- 定義
- 新增
- 更新
- 刪除
- 查詢
- JSON字段
- 獲取器
- 修改器
- 自動時間戳
- 只讀字段
- 軟刪除
- 類型轉換
- 數據完成
- 查詢范圍
- 模型輸出
- 模型事件
- 模型關聯
- 一對一關聯
- 一對多關聯
- 遠程一對多
- 多對多關聯
- 多態關聯
- 關聯預載入
- 關聯統計
- 關聯輸出
- 視圖
- 視圖渲染
- 視圖賦值
- 視圖過濾
- 模板引擎
- 模板
- 變量輸出
- 使用函數
- 運算符
- 原樣輸出
- 模板注釋
- 模板布局
- 模板繼承
- 包含文件
- 輸出替換
- 標簽庫
- 內置標簽
- 循環標簽
- 比較標簽
- 條件判斷
- 資源文件加載
- 標簽嵌套
- 原生PHP
- 定義標簽
- 標簽擴展
- 錯誤和日志
- 異常處理
- 日志處理
- 調試
- 調試模式
- Trace調試
- 性能調試
- SQL調試
- 變量調試
- 遠程調試
- 驗證
- 驗證器
- 驗證規則
- 錯誤信息
- 驗證場景
- 路由驗證
- 內置規則
- 獨立驗證
- 靜態調用
- 表單令牌
- 雜項
- 緩存
- Session
- Cookie
- 多語言
- 分頁
- 上傳
- 命令行
- 啟動內置服務器
- 自動生成目錄結構
- 創建類庫文件
- 生成類庫映射文件
- 清除緩存文件
- 生成配置緩存文件
- 生成數據表字段緩存
- 生成路由映射緩存
- 自定義指令
- 擴展庫
- 驗證碼
- 圖像處理
- Time
- 數據庫遷移工具
- Workerman
- MongoDb
- 單元測試
- 安全和性能
- 安全建議
- 優化建議
- 附錄
- 助手函數
- 升級指導
- 更新日志