Вы можете выполнить это, обернув каждый канал в goroutine, который «пересылает» сообщения на общий «совокупный» канал. Например:
agg := make(chan string)
for _, ch := range chans {
go func(c chan string) {
for msg := range c {
agg <- msg
}
}(ch)
}
select {
case msg <- agg:
fmt.Println("received ", msg)
}
Если вам нужно знать, с какого канала отправлено сообщение, вы можете перенести его в структуру с какой-либо дополнительной информацией, прежде чем перенаправлять ее на общий канал.
В моем (ограниченном) тестировании этот метод значительно отличается от используемого пакета отражения:
$ go test dynamic_select_test.go -test.bench=.
...
BenchmarkReflectSelect 1 5265109013 ns/op
BenchmarkGoSelect 20 81911344 ns/op
ok command-line-arguments 9.463s
Код контрольной точки здесь
Просто добавьте следующий код в каждый контроллер actionIndex (), все остальное позаботится
$searchModel = new CentervideosSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
/*Code insertion block begin*/
$params = Yii::$app->request->queryParams;
if (count($params) <= 1)
{
$params = Yii::$app->session['customerparams'];
if(isset(Yii::$app->session['customerparams']['page']))
$_GET['page'] = Yii::$app->session['customerparams']['page'];
if(isset(Yii::$app->session['customerparams']['per-page']))
$_GET['per-page'] = Yii::$app->session['customerparams']['per-page'];
}
else
{
Yii::$app->session['customerparams'] = $params;
}
$dataProvider = $searchModel->search($params);
/*Code insertion block Ends*/
Если вам нужно только сохранить страницу, не так ли легко передать параметр page
в ваш url-адрес (<model/view>
), например <model>/view?id=<id>&page=<page>
?
в вашем представлении index.php
, отредактируйте свой ActionColumn следующим образом:
[
'class' => 'yii\grid\ActionColumn',
'urlCreator' => function ($action, $model, $key, $index) {
return \yii\helpers\Url::to([$action, 'id' => $model->id, 'page' => Yii::$app->request->getQueryParam('page', null)]);
},
],
Как вы можете видеть, я получаю параметр страницы из URL-адреса запроса и передаю его кнопкам действий моделей (всем кнопкам, но в вашем вопросе он будет достаточно для кнопки view
, конечно)
И когда вы нажимаете на view
модель, в нашем контроллере нам нужно получить это значение page
и передать его на наш view.php
вид (в
Наш ModelController:
public function actionView($id, $page = null)
{
return $this->render('view', [
'model' => $this->findModel($id),
'page' => $page,
]);
}
И, наконец, представление view.php
получит значение page
и заполнит index
url ( если не null):
/* @var $page int */
$this->title = $model->name;
$this->params['breadcrumbs'][] = ['label' => 'Index', 'url' => ['index', 'page' => $page]];
Поэтому, когда вы нажимаете палитру Index, она откроет страницу, в которую вы ввели.
Некоторые преимущества снова повторяют выполнение сеанса ( @ user1764431):
Некоторые недостатки :
[g1 3]