Heim > Artikel > Backend-Entwicklung > PHP-Framework – thinkPHP-URL-Variable abrufen, nicht $_GET[]-Variable?
Wenn ich „URL_PARAMS_BIND_TYPE“=>1 einschalte, erlaubt //der Parameterübergabemodus die sequentielle Übergabe von Parametern, d. h. die URL schreibt keine Variablennamen
Besuchen
http://localhost/yb1/Home/Get...
Warum gibt es nichts?
Wie kann man $_GET[""] in thinkPHP einen Wert zuweisen?
<code> public function test($id ,$name ) { echo $_GET["id"] . "-" . $_GET["name"]; } </code>
Wenn ich „URL_PARAMS_BIND_TYPE“=>1 einschalte, erlaubt //der Parameterübergabemodus die sequentielle Übergabe von Parametern, d. h. die URL schreibt keine Variablennamen
Besuchen
http://localhost/yb1/Home/Get...
Warum gibt es nichts?
Wie kann man $_GET[""] in thinkPHP einen Wert zuweisen?
<code> public function test($id ,$name ) { echo $_GET["id"] . "-" . $_GET["name"]; } </code>
Zu diesem Zeitpunkt müssen Sie Code schreiben, um diese magischen Probleme zu erklären.
Schauen Sie nach unten (von ThinkPHPLibraryThinkDispatcher.class.php
Zeile 211):
<code> $depr = C('URL_PATHINFO_DEPR'); $paths = explode($depr,trim($_SERVER['PATH_INFO'],$depr)); if(!defined('BIND_CONTROLLER')) {// 获取控制器 if(C('CONTROLLER_LEVEL')>1){// 控制器层次 $_GET[$varController] = implode('/',array_slice($paths,0,C('CONTROLLER_LEVEL'))); $paths = array_slice($paths, C('CONTROLLER_LEVEL')); }else{ $_GET[$varController] = array_shift($paths); } } // 获取操作 if(!defined('BIND_ACTION')){ $_GET[$varAction] = array_shift($paths); } // 解析剩余的URL参数 $var = array(); if(C('URL_PARAMS_BIND') && 1 == C('URL_PARAMS_BIND_TYPE')){ // URL参数按顺序绑定变量 $var = $paths; }else{ preg_replace_callback('/(\w+)\/([^\/]+)/', function($match) use(&$var){$var[$match[1]]=strip_tags($match[2]);}, implode('/',$paths)); } $_GET = array_merge($var,$_GET); }</code>
Der Code schneidet zunächst die Pfadinformationen in der URL aus, die den Getpost/test/2/xxx
-Teil darstellen, und in der vorherigen Phase des Erhaltens des Controllers wird Getpost/test
entfernt, und schließlich wird der Prozess der Bindung von URL-Parametern durchgeführt paths
-Daten werden direkt var
zugewiesen und dann im Array $_GET
zusammengeführt. Daher gibt es nur Werte im Array $_GET, nicht jedoch den Hauptschlüssel des Hosts, da dies bei TP nicht der Fall ist Wissen Sie, welchen Schlüssel Sie binden möchten.
Bezüglich der Bindung schauen Sie sich weiterhin den Code an:
Schauen Sie nach unten (von ThinkPHPLibraryThinkApp.class.php
Zeile 136):
<code> switch($_SERVER['REQUEST_METHOD']) { case 'POST': $vars = array_merge($_GET,$_POST); break; case 'PUT': parse_str(file_get_contents('php://input'), $vars); break; default: $vars = $_GET; } $params = $method->getParameters(); $paramsBindType = C('URL_PARAMS_BIND_TYPE'); foreach ($params as $param){ $name = $param->getName(); if( 1 == $paramsBindType && !empty($vars) ){ $args[] = array_shift($vars); }elseif( 0 == $paramsBindType && isset($vars[$name])){ $args[] = $vars[$name]; }elseif($param->isDefaultValueAvailable()){ $args[] = $param->getDefaultValue(); }else{ E(L('_PARAM_ERROR_').':'.$name); } } // 开启绑定参数过滤机制 if(C('URL_PARAMS_SAFE')){ $filters = C('URL_PARAMS_FILTER')?:C('DEFAULT_FILTER'); if($filters) { $filters = explode(',',$filters); foreach($filters as $filter){ $args = array_map_recursive($filter,$args); // 参数过滤 } } } array_walk_recursive($args,'think_filter'); $method->invokeArgs($module,$args);</code>
Das Obige ist der Code zum Binden von Parametern. Wenn URL_PARAMS_BIND_TYPE
wahr ist, werden die Pfadparameter nacheinander zu den Parametern der Funktion angezeigt und dann werden invokeArgs verwendet, um Werte zuzuweisen
Kannst du es nicht einfach machen?
<code>$_GET['id'] = 1001; $_GET['name'] = 'develop';</code>
dump($_REQUEST); Schauen Sie, vor dem Wert muss ein Parametername in der Form /id/23
stehen
Beispiel: http://192.168.45.3:8125/home...