Ошибка при попытке загрузить Dual Listbox в Yii2

В проекте, который я хочу разработать, пользователь может загрузить файл Excel (xls, xlsx) в систему.
Лист Excel имеет заголовки в первом ряду и значение в другом ряду. Система имеет шаблон Excel по умолчанию, который
состоит из правила для последовательности заголовков, такого как (имя, возраст, пол), но иногда пользователь использует собственный шаблон Excel, поэтому иногда последовательность заголовков становится такой (пол, имя, возраст).

Чтобы обработать эту последовательность, я планирую сделать процесс сопоставления для обработки последовательности заголовков перед сохранением значения в базе данных. Я хочу использовать двойной список.
У меня есть 2 таблицы в базе данных для этого процесса:

  1. Заголовок -> должен иметь столбец (header_id, header_name), все заголовки из файла были сохранены здесь.
    Каждый заголовок сохранен со своим собственным header_id и header_name
  2. Информация -> значение из файла Excel сохраните здесь.

и у меня также есть чистый (не сгенерированный Gii) CostumizedHeaderController.php, CostumizeHeader.php, Index.php

Это код в CostumizeHeaderController:

class CostumizeHeaderController extends Controller {

//put your code here

public function actionShowHeaders() {
$model = new CostumizeHeader();
$model->loadHeaders();
$items = \backend\models\CostumizeHeader::getAllHeader();

return $this->render('index', [
'model' => $model,
'items' => $items
]);
}}

Код в модели (CostumizeHeader.php)

class CostumizeHeader {
//put your code here

/**
* @var array IDs of the favorite foods
*/
public $list_headers = [];

public function rules() {
return [
[['list_headers'], 'string', 'max' => 255],
];
}

/**
* @return array customized attribute labels
*/
public function attributeLabels() {
return [
'list_headers' => 'list Costumized Header',
];
}

public function loadHeaders() {
$this->list_headers = [];
$headers = Header::find()->all();
foreach ($headers as $ff) {
$this->list_headers[] = $ff->header_id;
}
}

public static function getAllHeader() {
$headers = Header::find()->asArray()->all();
$items = ArrayHelper::map($headers, 'header_id', 'nama_header');
return $items;
}

код в index.php

 <?php
$form = ActiveForm::begin([
'id' => 'favorite-form',
'enableAjaxValidation' => false,
]);
?>

<?= $form->field($model->list_headers, 'list_headers')->widget(DualListbox::className(), [
'model' => $model,
'items' => $items,
'name'=>'nama_header',
'attribute' => 'list_headers',
'options' => [
'multiple' => true,
'size' => 15,
],
'clientOptions' => [
'nonSelectedListLabel' => 'Available Header',
'selectedListLabel' => 'Final Header',
'moveOnSelect' => false,
],
])
->hint('Select the header according the sequence.');
?>

Я попытался var_dump в контроллере и получил этот массив ([1] => age [2] => sex [3] => name).
И я проверил таблицу заголовков, и все заголовки из файла Excel были импортированы в базу данных.
Но я все еще получил ошибку, как это Вызов функции-члена formName () для необъекта.
Я бы хотел, чтобы кто-нибудь помог мне решить эту проблему. Спасибо

0

Решение

На вашей странице просмотра, я думаю, что вы используете поле неправильно $model->list_headers должно быть $model только.

Ваш index.php должен быть следующим:

<?php
$form = ActiveForm::begin([
'id' => 'favorite-form',
'enableAjaxValidation' => false,
]);
?>

<?= $form->field($model, 'list_headers')->widget(DualListbox::className(), [
'model' => $model,
'items' => $items,
'name'=>'nama_header',
'attribute' => 'list_headers',
'options' => [
'multiple' => true,
'size' => 15,
],
'clientOptions' => [
'nonSelectedListLabel' => 'Available Header',
'selectedListLabel' => 'Final Header',
'moveOnSelect' => false,
],
])
->hint('Select the header according the sequence.');
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]