Я новичок в Yii2. У меня есть gridview, где 2 столбца генерируются автоматически (не в классе модели). В каждой строке есть кнопка, по нажатию которой я хочу получить доступ к текущим значениям ячеек строки и выполнить некоторые вычисления.
Я не могу использовать $data
поскольку это относится только к текущей строке модели. ниже мой код:
<?php
echo GridView::widget([
'dataProvider' => $model->getInsuredCompanyVehiclesArrayDataProvider(),
'filterModel' => $model->getInsuredCompanyVehiclesArrayDataProvider(),
'columns' => [
[
'label' => 'Amount',
'format' => 'raw',
'value' => function ($data) {
return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100;
},
],
[
'label'=>'Total',
'format' => 'raw',
'value' => function ($model, $key, $index, $column) {
//return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount;
return '' . $column ;
},
],
],
]); ?>
amount
а также Total
значения столбца рассчитываются динамически, но я не могу получить доступ к этим значениям в других ячейках 🙁
Как вы, возможно, уже знаете из-за того, что столбцы динамически, вы не можете получить к ним доступ из других столбцов.
Я бы создал функции для обоих динамически столбцов (Amount и Total) в классе модели, чтобы вычислить ваши динамически столбцы. И после того, как вы нажмете свою кнопку в строке, обновите сетку с помощью Pajax.
Вы также можете добавить дополнительные данные в сетку, как указано выше. Вот
либо расширьте свою модель gridview, либо используйте встроенные функции (требуется PHP 5.3+).
Но тогда вы также должны снова вычислить значение каждого столбца, если они полностью динамически для каждой строки.
Но я думаю, ваша простая ошибка в том, что вы используете один раз
'value' => function ($data) {
а в другой раз
'value' => function ($model, $key, $index, $column) {
Обе функции верны. Один раз вы передаете модель функции с помощью параметра «name» $ data, а другой раз — с помощью «name» $ model.
Внутри функции у вас есть доступ только к параметрам, которые передаются в функцию.
Ваш второй встроенный код функции должен использовать $ model вместо $ data (имя первого параметра — модель).
return $model->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount;
Но, как я уже говорил, я бы создал функцию в вашем классе Model
public function getAmount() {
return $this->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100;
}
Что я не понимаю, так это то, что ваш Итог — это всего лишь сумма * 2?
Но я думаю, что это был просто тестовый код.
Других решений пока нет …