url後附帶參數"c"的時候,$_REQUEST怎麼取不到值呢?
但是如果把參數換成其他名字,比如大寫的"C",就能取到值了。
請問是怎麼回事?
回複內容:
url後附帶參數"c"的時候,$_REQUEST怎麼取不到值呢?
但是如果把參數換成其他名字,比如大寫的"C",就能取到值了。
請問是怎麼回事?
用的是thinkPHP
嗎?thinkPHP
預設會提取GET
參數中的c
作為controller
的名並以此為調度。你可以在config
檔案裡更換VAR_CONTROLLER
的值來選擇其他參數作為controller
名,這樣就不會妨礙c參數的傳遞了。
在thinkphp的架構中,請求分發部分需要解析m c a參數,解析後就從$_GET數組中刪除了對應的參數
path\to\ThinkPHP\Library\Think\Think.class.php
/** * 應用程式初始化 * @access public * @return void */ static public function start() { ... // 運行應用 App::run(); }
path\to\ThinkPHP\Library\Think\App.class.php
/** * 運行應用執行個體 入口檔案使用的快捷方法 * @access public * @return void */ static public function run() { ... App::init(); ... }
/** * 應用程式初始化 * @access public * @return void */ static public function init() { ... // URL調度 Dispatcher::dispatch(); ...
path\to\ThinkPHP\Library\Think\Dispatcher.class.php
/** * URL映射到控制器 * @access public * @return void */ static public function dispatch() { ... // 擷取模組名稱 define('MODULE_NAME', defined('BIND_MODULE')? BIND_MODULE : self::getModule($varModule)); ... // 擷取控制器的命名空間(路徑) define('CONTROLLER_PATH', self::getSpace($varAddon,$urlCase)); // 擷取控制器和操作名 define('CONTROLLER_NAME', defined('BIND_CONTROLLER')? BIND_CONTROLLER : self::getController($varController,$urlCase)); define('ACTION_NAME', defined('BIND_ACTION')? BIND_ACTION : self::getAction($varAction,$urlCase)); ...
/** * 獲得實際的控制器名稱 */ static private function getController($var,$urlCase) { ... $controller = (!empty($_GET[$var])? $_GET[$var]:C('DEFAULT_CONTROLLER')); unset($_GET[$var]); ... }
擷取模組和操作方法的代碼類似.
其實本來也不應該直接從$_GET中取資料,因為如果使用pathinfo的URL模式或者rewrite的URL模式的時候這些參數都不在$_GET中
你的裡怎麼是post?