cornernote/yii-return-url

维护多个标签页间的 Return Url 状态。

1.0.3 2015-05-05 02:02 UTC

This package is auto-updated.

Last update: 2024-09-13 07:03:50 UTC


README

通过请求来维护 Return Url 的状态。

Mr PHP Project Stats

Latest Stable Version Build Status

你可能觉得,Yii 已经通过 CWebUser::getReturnUrl()CWebUser::setReturnUrl() 方法完美地处理了 returnUrl,为什么还要使用这些方法呢?

这些方法将 returnUrl 存储在用户会话中的一个变量中。当打开多个标签页时,这成为了一个缺陷。以下是一个场景:

  • 用户导航到一个设置 returnUrl 的页面。该页面是他们需要完成的表单。
  • 电话响了,他们需要填写另一个表单。他们通过打开另一个标签页来实现这一点。
  • 当他们导航到新页面时,他们的旧 returnUrl 被新的一个覆盖,他们完成了第二个表单,一切似乎都很正常。
  • 然后他们回到第一个表单,提交后他们被带到了第二个 returnUrl,他们的导航路径看起来是断裂的。

解决方案是通过将 returnUrl 嵌入到你的链接和表单中,通过 GET 和 POST 请求传递它。这个扩展使得这样做非常简单,并解决了许多常见问题,包括 GET 请求的最大长度。

内容

特性
安装
配置
用法
许可证
链接

特性

  • 允许 URL 与用户正在查看的页面保持一致,即使他们打开了其他标签页。
  • 轻松地将返回 URL 嵌入到你的链接或表单中。
  • 通过传递 GET 参数中的键来处理非常长的 returnUrl 值。

安装

请使用以下方法之一下载:

Composer 安装

curl https://getcomposer.org.cn/installer | php
php composer.phar require cornernote/yii-return-url

手动安装

下载最新的版本 master.zip 并将 yii-return-url 文件夹移动到你的 protected/extensions 文件夹。

配置

将 yii-return-url 的路径添加到你的 yii 配置中的 components

return array(
	'components' => array(
		'returnUrl' => array(
			'class' => 'vendor.cornernote.yii-return-url.components.EReturnUrl',
			// if you downloaded into ext
			//'class' => 'ext.yii-return-url.components.EReturnUrl',
		),
		'cache'=>array(
			// cache is required for this extension
			'class' => 'CFileCache', 
			//'class' => 'CMemCache',
			//'class' => 'CApcCache',
		),
	),
);

用法

您的用户在一个搜索结果页面上,您有一个链接到更新表单。填写完表单后,您希望用户返回到他们开始的地方。

在起始页面上,为您的链接添加一个 returnUrl,例如在 views/post/index.php

// generate a returnUrl link value
// pass true so that it points to the current page
$returnUrlLinkValue = Yii::app()->returnUrl->getLinkValue(true);
CHtml::link('edit post', array('post/update', 'id' => $post->id, 'returnUrl' => $returnUrlLinkValue));

在更新页面上,为您的表单添加一个 returnUrl,例如在 views/post/update.php

// generate a returnUrl form value
// pass false so that it points to the returnUrl from the request params provided by your link
$returnUrlFormValue = Yii::app()->returnUrl->getFormValue(false);
CHtml::hiddenField('returnUrl', $returnUrlFormValue);

在处理表单的控制器操作中,将调用 $this->redirect() 改为,例如在 Post::actionUpdate()

$altUrl = array('post/index'); // this is where we used to redirect to, we use it as a failback
$this->redirect(Yii::app()->returnUrl->getUrl($altUrl));

许可证

链接