Yii2: форма виджета Depdrop Kartik продолжает загружаться - PullRequest
0 голосов
/ 08 июля 2019

Я использую виджет Depdrop от Kartik, но поле продолжает загружаться, когда пытается найти данные для заполнения раскрывающегося списка.

Field not loading...

Я недавно обновил свои виджеты через Composer и получил эту ошибку (я не уверен, является ли это причиной) .

Поле в представлении:

        <?= $form->field($model, 'IdCamion')->widget(DepDrop::classname(), [
            'type' => DepDrop::TYPE_SELECT2,
            'pluginOptions' => [
                'depends' => ['produccion-idcliente', 'produccion-tipotarifa'],
                'placeholder' => 'Seleccione...',
                'url' => Url::to(['/operaciones/camiones'])
            ]
        ]); ?>

и действие для заполнения выпадающего списка:

public function actionCamiones()
{
    $out = [];
    if (isset($_POST['depdrop_parents'])) {

        $parents = $_POST['depdrop_parents'];
        $data_lista = array();
        if ($parents != null) {
            $cliente = $parents[0];
            $tarifa = $parents[1];
            $array = Tarifa::find()->where(['IdCliente' => $cliente])->andWhere(['TipoTarifa' => $tarifa])
                ->andWhere(['eliminado' => 0])->andWhere(['estado' => 5])->groupby('TamanoCamion')->all();
            foreach ($array as $key => $value) {
                $camiones = Camiones::find()->where(['Tamano' => $value->TamanoCamion])->andwhere('Estatus = 1 or Estatus = 18')->all();
                foreach ($camiones as $key => $camion) {
                    $data_lista[] = array('id' => $camion->NumeroCamion, 'name' => $camion->NumeroCamion);
                }
            }
            $out = $data_lista;
            echo Json::encode(['output' => $out, 'selected' => '']);
            return;
        }
    }
    echo Json::encode(['output' => '', 'selected' => '']);
}

я получаю данные, подобные этим (вывод, который я выкладываю, длиннее , но я сократил его, чтобы он не был утомительным):

{"output":[{"id":"124","name":"124"},{"id":"161","name":"161"},        
{"id":"163","name":"163"},{"id":"125","name":"125"}, 
{"id":"112","name":"112"},{"id":"113","name":"113"}, 
{"id":"114","name":"114"},{"id":"115","name":"115"}, 
{"id":"492","name":"492"},{"id":"493","name":"493"}],"selected":""}
An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in 
/var/www/html/sat2-panama/controllers/OperacionesController.php on line 
1618. in /var/www/html/sat2- 
panama/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/sat2-panama/vendor/yiisoft/yii2/web/Response.php(339): 
yii\web\Response->sendHeaders()
#1 /var/www/html/sat2- 
panama/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yii\web\Response- 
>send()
#2 /var/www/html/sat2- 
panama/vendor/yiisoft/yii2/base/ErrorHandler.php(111): 
yii\web\ErrorHandler- 
>renderException(Object(yii\web\HeadersAlreadySentException))
#3 [internal function]: yii\base\ErrorHandler- 
>handleException(Object(yii\web\HeadersAlreadySentException))
#4 {main}
Previous exception:
yii\web\HeadersAlreadySentException: Headers already sent in 
/var/www/html/sat2-panama/controllers/OperacionesController.php on line 
1618. in /var/www/html/sat2- 
panama/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/sat2-panama/vendor/yiisoft/yii2/web/Response.php(339): 
yii\web\Response->sendHeaders()
#1 /var/www/html/sat2- 
panama/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Response- 
>send()
#2 /var/www/html/sat2-panama/web/index.php(12): yii\base\Application- 
>run()
#3 {main}

Ожидается, что данные будут располагаться следующим образом:

{output: [{id: "124", name: "124"}, {id: "161", name: "161"}, {id: "163", 
name: "163"},…],…}
output: [{id: "124", name: "124"}, {id: "161", name: "161"}, {id: "163", 
name: "163"},…]
selected: ""

Странная часть возникает, когда вы выбираете другую опцию из выпадающих списков родителей, она правильно заполняется с помощьюданные.

Field populated.

Проблема с опцией "Viaje" в поле "Тарифа", я не знаю, если это проблемас обработкой данных или размером данных, но с другими опциями, данные меньше и правильно заполняют раскрывающийся список.

РЕДАКТИРОВАТЬ: я сделал еще один тест:

я использовал другую функцию, чтобы заполнить раскрывающийся список с проблемой:

public function PruebaDataDrop()
 {
    for ($i = 0; $i < 194; $i++) {
        $data_lista[] = array('id' => $i, 'name' => $i);
    }
    return $data_lista;
}

он работает только с 195 позиций вМассив (0-194), когда я пробовал 195 или больше, это дает мне ту же проблему (выпадающий список продолжает загружаться).

Заранее спасибо.

1 Ответ

1 голос
/ 08 июля 2019

Вы должны использовать

return Json::encode(['output' => $out, 'selected' => '']); 

и

return Json::encode(['output' => '', 'selected' => '']);

Это решит вашу проблему.

...