php goback,Yii2:从’$this-> goBack()’中排除特定的控制器操作

本文介绍了一种通过扩展Yii框架的UrlManager,添加'caller'参数来处理iframe跨域通信的方法。作者详细阐述了如何修改控制器的goBack()方法,以及在配置文件中配置新的UrlManager,以确保iframe中的链接和回退操作能够正确处理。
摘要由CSDN通过智能技术生成

好的,我会去看看!此代码完全未经测试!你的问题是该动作无法知道它是否是从iframe调用的,除非你给它一个.因此,我尝试回答的基础是iframe的所有网址都应该有一个额外的get参数.让我们打电话给那个来电者.所以每个iframe应该看起来像

Url::to($this->context->route)]); ?>">

<?php $this->render($view); ?>//Pass additional parameters to the view if needed

现在我们有一种测试控制器/动作调用的方法,看看我是否被iframe请求.调用者参数很重要,因为它允许我们提取一个字符串以用作goBack()和其他方法的值.

接下来,我们需要扩展UrlManager,因为所有请求,响应,Url:to()和goBack()方法和类最终都使用UrlManager来完成生成URL的方法.

因此,创建一个新的UrlManager.我们将从现有的UrlManager中复制大部分代码,只是添加了我们自己的一些辛辣.我已将其存储在命令中,但将您放在您喜欢的位置并相应地更改命名空间.

namespace app\commands;

use Yii;

use yii\web\UrlManager;

class CustomUrlManager extends UrlManager {

public function createUrl($params){

$request = Yii::$app()->request;

$caller = $request->get('caller');

if ($caller && !$params['caller']){

$params['caller'] = $caller;

}

return parent::createUrl($params);

}

}

所以现在,iframe会生成一个调用者参数,iframe中的每个链接都会将调用者作为参数附加,因为你已经使用了Url :: to()(或该方法的变体)或Yii :: $app-> UrlManager生成您的链接.

现在我们需要做的就是自定义控制器的goBack()方法,将任何goBack()请求发送到原始源iframe.

public function goBack($defaultUrl = null)

{

$caller = Yii::$app->request->get('caller');

if ($caller){

return Yii::$app->getResponse()->redirect($caller);

}

return Yii::$app->getResponse()->redirect(Yii::$app->getUser()->getReturnUrl($defaultUrl));

}

最后,您需要在配置文件中配置Yii以使用新的UrlManager;

'components' => [

'urlManager' => [

'class' => 'app/commands/CustomUrlManager'

]

]

我很想知道这是否有效,这是一个有趣的挑战!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值