cornernote/yii2-returnurl

为 Yii2 提供支持标签感知嵌套重定向的 ReturnUrl 辅助函数。

1.0.2 2017-05-09 04:37 UTC

This package is auto-updated.

Last update: 2024-09-12 09:44:44 UTC


README

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

为 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));

示例

list update relations

许可证

链接

Mr PHP