ThinkPHP中U()和redirect()还有success()三个跳转方法有什么区别??
ThinkPHP中U()和redirect()还有success()三个跳转方法有什么区别??
回复内容:
ThinkPHP中U()和redirect()还有success()三个跳转方法有什么区别??
u助手函数是生成url,不涉及跳转功能。
success和redirect的区别就是前者在跳转模板上有个笑脸图案,其他没任何区别。
你可以看看tp的源代码就能找到答案的
U函数用于生成URL。
公共的redirect函数用于重定向URL。
控制器中的redirect方法,也用于重定向URL,可以指定跳转时间,跳转文字。
控制器中的success方法,和redirect一样,但是有个:)的笑脸。
控制器中的error方法,和redirect一样,但是有个:(的哭脸
如果这里阅读不方便,请访问ThinkPHP中U函数和redirect、success方法的区别。
在此之前我要纠正一下你的描述,U
这个不叫方法,叫函数。
关于这三者的区别,我们可以看下thinkphp
的源代码。
U函数
/** * URL组装 支持不同URL模式 * @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...' * @param string|array $vars 传入的参数,支持数组和字符串 * @param string|boolean $suffix 伪静态后缀,默认为true表示获取配置值 * @param boolean $domain 是否显示域名 * @return string */ function U($url = '', $vars = '', $suffix = true, $domain = false) { //省略 }
其实他的注释已经说的很清楚了,返回值是一个string类型,其实返回的是生成的网址。
他不是一个动作,只是一个辅助函数而已。
success方法
/** * 操作错误跳转的快捷方法 * @access protected * @param string $message 错误信息 * @param string $jumpUrl 页面跳转地址 * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间 * @return void */ protected function error($message = '', $jumpUrl = '', $ajax = false) { $this->dispatchJump($message, 0, $jumpUrl, $ajax); } /** * 操作成功跳转的快捷方法 * @access protected * @param string $message 提示信息 * @param string $jumpUrl 页面跳转地址 * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间 * @return void */ protected function success($message = '', $jumpUrl = '', $ajax = false) { $this->dispatchJump($message, 1, $jumpUrl, $ajax); }
这里可以很明显的看到,success
和error
都是封装的dispatchJump
方法,区别是第二个参数。
我们再去dispatchJump
看看。
/** * 默认跳转操作 支持错误导向和正确跳转 * 调用模板显示 默认为public目录下面的success页面 * 提示页面为可配置 支持模板标签 * @param string $message 提示信息 * @param Boolean $status 状态 * @param string $jumpUrl 页面跳转地址 * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间 * @access private * @return void */ private function dispatchJump($message, $status = 1, $jumpUrl = '', $ajax = false) { if (true === $ajax || IS_AJAX) { // AJAX提交 $data = is_array($ajax) ? $ajax : array(); $data['info'] = $message; $data['status'] = $status; $data['url'] = $jumpUrl; $this->ajaxReturn($data); } if (is_int($ajax)) { $this->assign('waitSecond', $ajax); } if (!empty($jumpUrl)) { $this->assign('jumpUrl', $jumpUrl); } // 提示标题 $this->assign('msgTitle', $status ? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_')); //如果设置了关闭窗口,则提示完毕后自动关闭窗口 if ($this->get('closeWin')) { $this->assign('jumpUrl', 'javascript:window.close();'); } $this->assign('status', $status); // 状态 //保证输出不受静态缓存影响 C('HTML_CACHE_ON', false); if ($status) { //发送成功信息 $this->assign('message', $message); // 提示信息 // 成功操作后默认停留1秒 if (!isset($this->waitSecond)) { $this->assign('waitSecond', '1'); } // 默认操作成功自动返回操作前页面 if (!isset($this->jumpUrl)) { $this->assign("jumpUrl", $_SERVER["HTTP_REFERER"]); } $this->display(C('TMPL_ACTION_SUCCESS')); } else { $this->assign('error', $message); // 提示信息 //发生错误时候默认停留3秒 if (!isset($this->waitSecond)) { $this->assign('waitSecond', '3'); } // 默认发生错误的话自动返回上页 if (!isset($this->jumpUrl)) { $this->assign('jumpUrl', "javascript:history.back(-1);"); } $this->display(C('TMPL_ACTION_ERROR')); // 中止执行 避免出错后继续执行 exit; } }
我们看到了,这里面没有任何关于跳转的代码,只是装载了模板,注册了几个模板变量并显示而已。
那么它是在哪里跳转的呢?显而易见地,是在模板上。我们去默认模板看看:
(function(){ var wait = document.getElementById('wait'),href = document.getElementById('href').href; var interval = setInterval(function(){ var time = --wait.innerHTML; if(time <= 0) { location.href = href; clearInterval(interval); }; }, 1000); })();
可以看到,是通过javascript
的location.href
进行的跳转。即他是客户端实现的跳转。
redirect 方法
/** * Action跳转(URL重定向) 支持指定模块和延时跳转 * @access protected * @param string $url 跳转的URL表达式 * @param array $params 其它URL参数 * @param integer $delay 延时跳转的时间 单位为秒 * @param string $msg 跳转提示信息 * @return void */ protected function redirect($url, $params = array(), $delay = 0, $msg = '') { $url = U($url, $params); redirect($url, $delay, $msg); }
我们可以看到,redirect
方法先是用U
函数获取了地址做参数,传给了redirect
函数。是对这个函数的封装。
我们再去redirect
函数看看。
/** * URL重定向 * @param string $url 重定向的URL地址 * @param integer $time 重定向的等待时间(秒) * @param string $msg 重定向前的提示信息 * @return void */ function redirect($url, $time = 0, $msg = '') { //多行URL地址支持 $url = str_replace(array("\n", "\r"), '', $url); if (empty($msg)) { $msg = "系统将在{$time}秒之后自动跳转到{$url}!"; } if (!headers_sent()) { // redirect if (0 === $time) { header('Location: ' . $url); } else { header("refresh:{$time};url={$url}"); echo ($msg); } exit(); } else { $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>"; if (0 != $time) { $str .= $msg; } exit($str); } }
可以看到一个很短的函数,有两种服务端跳转方式,分别用于是否已输出了http头部的情况。是服务端的跳转。
总结
U
函数只会用来生成一个url,不会执行跳转。success
方法本身不会跳转,而是因为默认的模板上有跳转的javascript
代码。redirect
方法是调用的服务端函数进行的跳转。
看thinkPHP的官方文档

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

Les paramètres de routage ThinkPhp6 sont traités en chinois et acquisition complète. Dans le cadre ThinkPHP6, les paramètres d'URL contenant des caractères spéciaux (tels que les marques chinoises et ponctuation) sont souvent traités ...
