Error when trying to load Dual Listbox in Yii2

南笙酒味 提交于 2019-12-12 05:14:39

问题


In the project that I want to develop, user can upload an Excel file (xls,xlsx) to system. The excel sheet has headers in the first row, and value in another row. System has a default excel template that consist the rule for headers sequence such as (Name, Age, Sex), but sometimes user use their own excel template so sometimes the header sequence become like this (Sex, Name, Age).

To handle this sequence, I've a plan to make a mapping process to handle the headers sequence before save the value to database. I wanna use dual list box. I've 2 a table in database for this process:

  1. Header -> has to column (header_id, header_name), all the headers from file has been save in here. Each headers saved with their own header_id and header_name
  2. Info -> the value from the excel file save here.

and I also has a pure (not generated by Gii) CostumizedHeaderController.php, CostumizeHeader.php, Index.php

This is code in 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
    ]);
}}

Code in model (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;
}

code in 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.');
?>

I've try to var_dump in controller and got this Array ( [1] => age [2] => sex [3] => name . And I've been check the header table, and all the headers from excel file have been imported to database. But I still got an error, like this Call to a member function formName() on a non-object. I wish anybody can help me to solve this problem. Thankyou


回答1:


Inside your view page I think you are using field incorretly $model->list_headers should be $model only.

your index.php must be as follows:

<?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.');
?>


来源:https://stackoverflow.com/questions/40674952/error-when-trying-to-load-dual-listbox-in-yii2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!