QueryPHP 控制器定義設計得非常靈活,可以有多種情況,下面一個個為大家講解一下。
# 1):繼承至 Q\mvc\controller
home 應用編寫一個 hello 控制器,控制器的路徑為 **<project>/app/home/controller/hello.php**
~~~
<?php
namespace home\controller;
use Q\mvc\controller;
class hello extends controller {
/**
* 默認方法
*/
public function index() {
$this->assign('strSay', 'hello world');
$this->display();
}
}
~~~
定義模板文件,實際路徑為 **<project>/app/home/theme/default/hello_index.html**
~~~
我想對世界說
{$strSay}
~~~
訪問該控制器 url 地址:
~~~
http://<service>/?c=hello
~~~
輸出結果:
~~~
我想對世界說 hello world
~~~
# 2):不繼承任何控制器
為實現上面相同的功能,我們這里不繼承任何控制器,手動去調用視圖,輸出結果見上面。
~~~
<?php
namespace home\controller;
use Q\mvc\view;
class hello {
/**
* 默認方法
*/
public function index() {
$objView = view::run ();
$objView->assign ( 'strSay', 'hello world' );
$objView->display ();
}
}
~~~
# 3):注冊控制器為回調
控制器可以為一個回調,這種情況需要預先注冊,新建一個路由配置文件,位置為 **<project>/app/home/option/router.php**。
### 1:匿名函數支持
~~~
<?php
// 匿名函數回調
router::bind ( 'hello', function( ){
$this->assign ( 'strSay', '匿名函數' );
$this->display ();
} );
~~~
輸出結果:
~~~
我想對世界說 匿名函數
~~~
### 2:靜態類回調支持
修改路由文件 router.php,改為如下:
~~~
<?php
class helloworld {
/**
* 返回 say
*
* @return string
*/
public static function getSay($that) {
$that->assign ( 'strSay', '靜態回調' );
$that->display ();
}
}
// 注冊路由
router::bind ( 'hello', [
'helloworld',
'getSay'
] );
~~~
輸出結果:
~~~
我想對世界說 靜態回調
~~~
### 3:對象實例回調支持
修改路由文件 router.php,改為如下:
~~~
<?php
class helloworld {
/**
* 返回 say
*
* @return string
*/
public function getSay($that) {
$that->assign ( 'strSay', '實例回調' );
$that->display ();
}
}
// 注冊路由
router::bind ( 'hello', [
new helloworld (),
'getSay'
] );
~~~
輸出結果:
~~~
我想對世界說 實例回調
~~~
# 4):注冊繼承至 Q\mvc\action
修改路由文件 router.php,改為如下:
~~~
<?php
use Q\mvc\action;
class helloworld extends action{
/**
* 返回 say
*
* @return string
*/
public function run($that, $in = []) {
$that->assign ( 'strSay', '繼承至 Q\base\action' );
$that->display ();
}
}
// 注冊路由
router::bind ( 'hello', new helloworld() );
~~~
輸出結果:
~~~
我想對世界說 繼承至 Q\mvc\action
~~~
# 5):注冊繼承至 Q\mvc\controller
修改路由文件 router.php,改為如下:
~~~
<?php
use Q\mvc\controller;
class helloworld extends controller{
/**
* 返回 say
*
* @return string
*/
public function index() {
$this->assign ( 'strSay', '繼承至 Q\base\controller' );
$this->display ();
}
}
// 注冊路由
router::bind ( 'hello', new helloworld() );
~~~
輸出結果:
~~~
我想對世界說 繼承至 Q\mvc\controller
~~~
# 6):注冊對象實例
修改路由文件 router.php,改為如下:
~~~
<?php
class helloworld{
/**
* 返回 say
*
* @return string
*/
public function index($that, $in) {
$that->assign ( 'strSay', '注冊對象實例' );
$that->display ();
}
}
// 注冊路由
router::bind ( 'hello', new helloworld() );
~~~
輸出結果:
~~~
我想對世界說 注冊對象實例
~~~
# 7):注冊普通數據類型
普通數據類型將會被直接輸出,修改路由文件 router.php,改為如下:
~~~
<?php
// 基本數據類型 string,integer,float,boolean,numeric,null
$booHello = true;
// 注冊路由
router::bind ( 'hello', $booHello );
~~~
輸出結果:
~~~
1
~~~
# 8):注冊數組類型
如果控制器為數組,那么鍵值則為方法,修改路由文件 router.php,改為如下:
### 1:回調支持
回調包括上面的匿名函數、靜態回調和對象實例回調,這里只測試一種。
~~~
<?php
$calHello = function( ){
$this->assign ( 'strSay', '數組匿名函數' );
$this->display ();
};
// 注冊路由
router::bind ( 'hello', ['index' => $calHello]);
~~~
輸出結果:
~~~
我想對世界說 匿名函數
~~~
### 2:數組支持
如果為數組直接返回 json,這里只測試一種。
~~~
<?php
$arrHello = ['name' => '我的世界', 'description' => '我樂我生活,你享你世界'];
// 注冊路由
router::bind ( 'hello', ['index' => $arrHello]);
~~~
輸出結果:
~~~
{"name":"我的世界","description":"我樂我生活,你享你世界"}
~~~
### 3:其它類型支持
數組的值可以還支持普通數據類型,**Q\base\action** 等,重復上面的注冊支持類型,只是值如果為數組則輸出 json。
~~~
<?php
$strHello = 'Ye,good';
// 注冊路由
router::bind ( 'hello', ['index' => $strHello]);
~~~
輸出結果:
~~~
Ye,good
~~~
- 關于 QueryPHP
- 獲取 QueryPHP
- 環境要求
- 許可協議 Free
- 執行流程 MVC
- 命名規范 $sName
- 目錄結構 DIR
- 單一入口 index.php
- 響應客戶端請求 URL
- 命名空間與自動載入 Autoload
- 路由
- 路由導入
- 批量導入
- 參數正則
- 分組定義
- 路由綁定
- 路由域名
- 分層控制器
- 默認和初始化APP
- 默認控制器和方法
- url 模式
- url 生成
- url 偽靜態
- url 重寫
- url 重定向
- 控制器綁定
- 方法器分層
- 控制器 __init
- 控制器方法交互
- 模板引擎語法
- C變量輸出 $sName
- C變量支持函數和方法 $sName|trim
- C快捷輸出 ~
- C標簽簡化 Css & Javascript
- C默認值 eq 三元運算符
- C變量運算符 +-
- 變量遞增遞減 ++--
- C循環數據 list
- N變量賦值 assign
- N循環數據 list
- N循環數據高級版 lists
- C循環數據 while
- N循環數據 while
- C循環數據 for
- N循環數據 for
- C條件判斷 if
- N條件判斷 if
- 標簽嵌套無限層級
- N循環流程 break & continue
- N使用 PHP 代碼
- N包含子模板 include
- J模板引擎 intro
- J條件判斷 if
- J循環數據 each
- J變量 & 表達式
- J變量支持函數和方法 hello|test
- J默認值 eq 三元運算符
- J框架前端組件 jquery.queryphp.js
- J前端 CSS 規范
- J前端 JS 規范
- 保護標簽自身 tagself
- 數據庫
- 數據庫配置
- 執行原生 sql 語句
- 數據庫事務
- 數據庫構造器 prefix
- 數據庫構造器 table
- 數據庫構造器 forceIndex
- 數據庫構造器 where
- 數據庫構造器 bind
- 數據庫構造器 join
- 數據庫構造器 union
- 數據庫構造器 orderBy
- 數據庫構造器 groupBy
- 數據庫構造器 having
- 數據庫構造器 distinct
- 數據庫構造器 aggregate
- 數據庫構造器 limit
- 數據庫構造器 forUpdate
- 數據庫構造器 columns
- 數據庫構造器 reset
- 數據庫集合查詢
- 數據庫查詢數據 get
- 數據庫查詢多條數據 getAll
- 數據庫查詢單條數據 getOne
- 數據庫查詢聚合查詢 aggregate
- 數據庫寫入數據 insert
- 數據庫寫入數據 insertAll
- 配置
- 配置格式
- 慣性配置
- 配置文件
- 讀取配置
- 設置配置
- 刪除配置
- 日志
- 日志配置參數
- 日志路徑
- 日志過濾器
- 日志處理器
- 緩存
- 緩存配置參數
- 緩存路徑
- 緩存指定時間
- COOKIE
- COOKIE 配置參數
- 開發調試
- 頁面 trace