2、Helper.php文件
<?php
use Yii;
class Helper
{
private static $returnUrl;
public static $returnUrlWithoutHistory = false;
/**
* @param int $depth
* @return string
*/
public static function getReturnUrl()
{
if (is_null(self::$returnUrl)) {
$url = parse_url(Yii::$app->request->url);
$returnUrlParams = [];
if (isset($url['query'])) {
$parts = explode('&', $url['query']);
foreach ($parts as $part) {
$pieces = explode('=', $part);
if (static::$returnUrlWithoutHistory && count($pieces) == 2 && $pieces[0] === 'returnUrl') {
continue;
}
if (count($pieces) == 2 && strlen($pieces[1]) > 0) {
$returnUrlParams[] = $part;
}
}
}
if (count($returnUrlParams) > 0) {
self::$returnUrl = $url['path'] . '?' . implode('&', $returnUrlParams);
} else {
self::$returnUrl = $url['path'];
}
}
return self::$returnUrl;
}
}
视图调用
1、直接调用,把Yii2自带的['class' => 'yiigridActionColumn']换成我们新写的['class' => 'commoncomponentsActionColumn'] 。
2、如直接调用不能满足你的要求可以自定义链接,自定义链接的写法如下:
[
'class' => 'commoncomponentsActionColumn',
'urlCreator' => function($action, $model, $key, $index) use ($id) {
//自定义链接传的参数
$params = [
$action,
'option_id' => $model->option_id,
'id' => $id,
];
$params['returnUrl'] = commoncomponentsHelper::getReturnUrl();
return yiihelpersUrl::toRoute($params);
},
'buttons' => [
[
'url' =>'view',
'class' => 'btn btn-success btn-xs',
'label' => Yii::t('yii', 'View'),
'appendReturnUrl' => false,//是否保留当前URL,默认为true
'url_append' => '',
'keyParam' => 'id', //是否传id,不传设置null
],
[
'url' => 'update',
'class' => 'btn btn-primary btn-xs btn-sm',
'label' => Yii::t('yii', 'Update'),
'appendReturnUrl' => true,//是否保留当前URL,默认为true
'url_append' => '',
'keyParam' => 'id', //是否传id,不传设置null
],
[
'url' => 'delete',
'class' => 'btn btn-danger btn-xs btn-sm',
'label' => Yii::t('yii', 'Delete'),
'options' => [
'data-action' => 'delete',
],
'appendReturnUrl' => true,//是否保留当前URL,默认为true
'url_append' => '',
'keyParam' => 'id', //是否传id,不传设置null
],
],
],
3、新增的话,这么引用<?= Html::a(Yii::t('yii', 'Create'), ['create','returnUrl' => Helper::getReturnUrl()], ['class' => 'btn btn-success']) ?> 。
控制器逻辑
1、用get获取returnUrl,代码:$returnUrl = Yii::$app->request->get('returnUrl'); 。
2、跳转到的URL:return $this->redirect($returnUrl); 。
分析总结
1、此方法的好处是不动核心代码,调用方式保留了Yii2自带的方式。







