cornernote / yii2-returnurl
为 Yii2 提供支持标签感知嵌套重定向的 ReturnUrl 辅助函数。
Requires
- yiisoft/yii2: *
Requires (Dev)
- phpunit/phpunit: 4.*
- scrutinizer/ocular: ~1.1
This package is auto-updated.
Last update: 2024-09-12 09:44:44 UTC
README
为 Yii2 提供支持标签感知嵌套重定向的 ReturnUrl 辅助函数。
你可能认为,Yii2 已经通过 Url::remember()
和 Url::previous()
方法完美处理了 returnUrl。为什么还要使用这些方法呢?
这些方法将 returnUrl 存储在用户会话中的单个变量中。当多个标签打开时,这成为一个缺陷。以下是一个场景:
- 用户导航到一个设置 returnUrl 的页面。这个页面是为他们必须完成的表单。
- 电话响了,他们需要填写另一个表单。他们通过打开另一个标签来实现这一点。
- 当他们导航到新页面时,他们的旧 returnUrl 被新的一个覆盖,他们完成了第二个表单,一切看起来都很正常。
- 然后他们回到第一个表单,提交后,他们被带到第二个 returnUrl,他们的导航路径看起来是断开的。
解决方案是将 returnUrl 通过 GET 和 POST 请求传递,将其嵌入到您的链接和表单中。这个扩展使这个过程变得非常简单,并解决了许多常见问题,包括 GET 请求的最大长度。
特性
- 允许 URL 与用户正在查看的页面保持一致,即使他们打开了其他标签。
- 轻松将返回 URL 嵌入您的链接或表单。
- 通过在 GET/POST 请求数据中传递一个令牌来处理非常长的 returnUrl 值。
要求
ReturnUrl 使用缓存来存储 URL 到令牌的映射。因此,您必须在配置中有一个缓存组件,例如
$config = [
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
],
],
安装
安装此扩展的首选方式是通过 composer。
运行
$ composer require cornernote/yii2-returnurl "*"
或添加
"cornernote/yii2-returnurl": "*"
到您的 composer.json
文件的 require
部分。
方法
ReturnUrl::getToken()
- 创建并返回一个新的令牌。将此传递到请求中,以标记当前页面为原始 URL。
ReturnUrl::getRequestToken()
- 返回当前令牌。将此传递到请求中,以允许在返回原始 URL 之前访问多个页面。
ReturnUrl::getUrl($altUrl)
- 返回原始 URL 或 $altUrl
(如果请求数据中没有找到令牌)。使用此值重定向到原始 URL。
用法
您的用户正在搜索结果页面上,您有一个链接到更新表单。填写完表单后,您希望用户返回到他们开始的页面。
在起始页面上,将 ReturnUrl::getToken()
添加到您的链接。这将设置当前页面为原始 URL。例如在 views/post/index.php
// generate a returnUrl link value Html::a('edit post', ['post/update', 'id' => $post->id, 'ru' => ReturnUrl::getToken()]);
在更新页面上,将 ReturnUrl::getRequestToken()
添加到您的表单。这将传递现有的令牌到下一个页面,以便在控制器成功保存后,控制器可以重定向到原始 URL。例如在 views/post/update.php
// generate a returnUrl form value Html::hiddenInput('ru', ReturnUrl::getRequestToken());
在处理表单的控制器操作中,将 $this->redirect($url)
的调用更改为 $this->redirect(ReturnUrl::getUrl($url))
。这会将用户重定向到原始 URL。例如在 Post::actionUpdate()
// this is where we used to redirect to, we use it as a fail-back // (if not provided then we redirect to the home page) $altUrl = ['post/index']; return $this->redirect(ReturnUrl::getUrl($altUrl));
示例
许可证
- 作者:Brett O'Donnell cornernote@gmail.com
- 源代码:https://github.com/cornernote/yii2-return-url
- 版权所有 © 2015 Mr PHP info@mrphp.com.au
- 许可证:BSD-3-Clause https://raw.github.com/cornernote/yii2-return-url/master/LICENSE