form以post提交表单name值为a时出错:
<input type="text" name="a" class="form-control" />
当input 不输入值 的时候是没问题的
当有值时,会报错:方法错误!!
找到\ThinkPHP\Library\Think\Dispatcher.class.php文件中的getAction方法
```php
/**
* 获得实际的操作名称
*/
static private function getAction($var,$urlCase) {
$action = !empty($_POST[$var]) ?
$_POST[$var] : \\tp框架把post中的a对应的值当做是action使用
(!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_ACTION'));
unset($_POST[$var],$_GET[$var]);
........
}
并且通过get的方式 也是接受不到a对应的值
//Dispatcher.class.php 222 行
// 获取操作
if(!defined('BIND_ACTION')){
$_GET[$varAction] = array_shift($paths); //将a对应的值覆盖并且在getAction 中将a的值给unset掉了
}
通过对Dispatcher.class.php查读,在input传参数是最要不要用name为 a、c、m、s、addon
//Dispatcher.class.php
/**
* URL映射到控制器
* @access public
* @return void
*/
static public function dispatch() {
$varPath = C('VAR_PATHINFO');
$varAddon = C('VAR_ADDON');
$varModule = C('VAR_MODULE');
$varController = C('VAR_CONTROLLER');
$varAction = C('VAR_ACTION');
$urlCase = C('URL_CASE_INSENSITIVE');
........
}
// ThinkPHP/Conf/convention.php
return array(
.....
/* 系统变量名称设置 */
'VAR_MODULE' => 'm', // 默认模块获取变量
'VAR_ADDON' => 'addon', // 默认的插件控制器命名空间变量
'VAR_CONTROLLER' => 'c', // 默认控制器获取变量
'VAR_ACTION' => 'a', // 默认操作获取变量
'VAR_PATHINFO' => 's', // 兼容模式PATHINFO获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_DEPR
.......
);