Yii2 Yi2获取动态表单中actionUpdate的异常作为未定义变量:modelOrderLineItems

Yii2 Yi2获取动态表单中actionUpdate的异常作为未定义变量:modelOrderLineItems,yii2,Yii2,我在OrderMaster页面中使用wbraganca/yii2 dynamicform for dynamic form添加多个OrderLineItem 根据说明,我已将所有代码添加到actionUpdate()和actionCreate()。actionCreate运行良好。但在更新的情况下,我得到的例外如下 PHP通知–yii\base\ErrorException 未定义变量:modelOrderLineItems statk跟踪如下所示: yii\base\ErrorExceptio

我在OrderMaster页面中使用wbraganca/yii2 dynamicform for dynamic form添加多个OrderLineItem

根据说明,我已将所有代码添加到actionUpdate()和actionCreate()。actionCreate运行良好。但在更新的情况下,我得到的例外如下

PHP通知–yii\base\ErrorException 未定义变量:modelOrderLineItems

statk跟踪如下所示:

yii\base\ErrorException:未定义变量:E:\xampp\htdocs\payment\views\order-master\u form.php:97堆栈中的modelOrderLineItems 跟踪: E:\xampp\htdocs\payment\views\order-master\u form.php(97):yii\web\ErrorHandler->handleError() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\View.php(348):yii\web\View->unknown() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\View.php(257):yii\web\View->renderppfile() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\View.php(156):yii\web\View->renderFile() E:\xampp\htdocs\payment\views\order master\update.php(18):yii\web\View->render() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\View.php(348):yii\web\View->unknown() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\View.php(257):yii\web\View->renderppfile() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\View.php(156):yii\web\View->renderFile() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\Controller.php(386): yii\web\View->render() E:\xampp\htdocs\payment\controllers\OrderMasterController.php(210):app\controllers\OrderMasterController->render() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\InlineAction.php(57): app\Controller\OrderMasterController->actionUpdate() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\InlineAction.php(57): ::调用用户函数数组:{E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\InlineAction.php:57}() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\Module.php(528):app\controllers\OrderMasterController->runAction() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\web\Application.php(103): yii\web\Application->runAction() E:\xampp\htdocs\payment\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest() E:\xampp\htdocs\payment\web\index.php(12):yii\web\Application->run() {main}

我的表格文件:

<div class="row">
    <div class="panel panel-default">
    <div class="panel-heading"><h4><i class="glyphicon glyphicon-envelope"></i>PO Line Items</h4></div>
    <div class="panel-body">
         <?php DynamicFormWidget::begin([
            'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
            'widgetBody' => '.container-items', // required: css class selector
            'widgetItem' => '.item', // required: css class
            'limit' => 30, // the maximum times, an element can be cloned (default 999)
            'min' => 1, // 0 or 1 (default 1)
            'insertButton' => '.add-item', // css class
            'deleteButton' => '.remove-item', // css class
            'model' => $modelOrderLineItems[0],
            'formId' => 'dynamic-form',
            'formFields' => [
                'item_detail',
                'unit_rate',
                'units',
                'total_price',
                'occurance',
            ],
        ]); ?>

        <div class="container-items"><!-- widgetContainer -->
        <?php foreach ($modelOrderLineItems as $i => $modelOrderLineItem): ?>
            <div class="item panel panel-default"><!-- widgetBody -->
                <div class="panel-heading">
                    <h3 class="panel-title pull-left">PO Line Item</h3>
                    <div class="pull-right">
                        <button type="button" class="add-item btn btn-success btn-xs"><i class="glyphicon glyphicon-plus"></i></button>
                        <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
                    </div>
                    <div class="clearfix"></div>
                </div>
                <div class="panel-body">
                    <?php
                        // necessary for update action.
                        if (! $modelOrderLineItem->isNewRecord) {
                            echo Html::activeHiddenInput($modelOrderLineItem, "[{$i}]id");
                        }
                    ?>
                    <div class="row">
                        <div class="col-sm-6">
                            <?= $form->field($modelOrderLineItem, "[{$i}]item_detail")->textInput(['maxlength' => true]) ?>
                        </div>
                        <div class="col-sm-6">
                            <?= $form->field($modelOrderLineItem, "[{$i}]unit_rate")->textInput(['maxlength' => true]) ?>
                        </div>
                    </div><!-- .row -->
                    <div class="row">
                        <div class="col-sm-4">
                            <?= $form->field($modelOrderLineItem, "[{$i}]units")->textInput(['maxlength' => true]) ?>
                        </div>
                        <div class="col-sm-4">
                            <?= $form->field($modelOrderLineItem, "[{$i}]total_price")->textInput(['maxlength' => true]) ?>
                        </div>
                        <div class="col-sm-4">
                            <?= $form->field($modelOrderLineItem, "[{$i}]occurance")->dropDownList(['OTC'=>'OTC','ARC'=>'ARC','OTC+ARC'=>'OTC+ARC']) ?>
                        </div>
                    </div><!-- .row -->
                </div>
            </div>
        <?php endforeach; ?>
        </div>
        <?php DynamicFormWidget::end(); ?>
    </div>

采购订单行项目
采购订单行项目
我的控制器文件:

<?php

    namespace app\controllers;

    use Yii;
    use app\models\OrderMaster;
    use app\models\OrderMasterSearch;
    use yii\web\Controller;
    use yii\web\NotFoundHttpException;
    use yii\filters\VerbFilter;
    use yii\web\UploadedFile;
    use app\models\OrderLineItem;
    use app\models\Model;
    use yii\helpers\ArrayHelper;
    //use yii\base\Model;
    use yii\web\Response;

     /**
         * Updates an existing OrderMaster model.
         * If update is successful, the browser will be redirected to the 'view' page.
         * @param integer $id
         * @return mixed
         * @throws NotFoundHttpException if the model cannot be found
         */
        public function actionUpdate($id)
        {
            $model = $this->findModel($id);
            $modelOrderLineItems = $model->orderLineItems;

            if ($model->load(Yii::$app->request->post())) {

                // For File upload. get the instance of uploaded file
                $poName = str_replace('/', '_', $model->order_number);
                $model->file = UploadedFile::getInstance($model, 'file');

                if(!empty($model->file)){
                    $model->file->saveAs('poFiles/'.$poName.'.'.$model->file->extension);
                    //save the path in the DB column
                    $model->po_file = 'poFiles/'.$poName.'.'.$model->file->extension;
                }

                //For Dynamic Form Update for PO Line Items
                $oldIDs = ArrayHelper::map($modelOrderLineItems, 'id', 'id');
                $modelOrderLineItems = Model::createMultiple(OrderLineItem::classname(), $modelOrderLineItems);
                OrderLineItem::loadMultiple($modelOrderLineItems, Yii::$app->request->post());
                $deletedIDs = array_diff($oldIDs, array_filter(ArrayHelper::map($modelOrderLineItems, 'id', 'id')));

    //            // ajax validation
                if (Yii::$app->request->isAjax) {
                    Yii::$app->response->format = Response::FORMAT_JSON;
                    return ArrayHelper::merge(
                        ActiveForm::validateMultiple($modelOrderLineItems),
                        ActiveForm::validate($model)
                    );
                }

                // validate all models
                $valid = $model->validate();
                $valid = Model::validateMultiple($modelOrderLineItems) && $valid;

                if ($valid) {
                    $transaction = \Yii::$app->db->beginTransaction();
                    try {
                        if ($flag = $model->save(false)) {
                            if (! empty($deletedIDs)) {
                                OrderLineItem::deleteAll(['id' => $deletedIDs]);
                            }
                            foreach ($modelOrderLineItems as $modelOrderLineItem) {
                                $modelOrderLineItem->order_id = $model->id;
                                if (! ($flag = $modelOrderLineItem->save(false))) {
                                    $transaction->rollBack();
                                    break;
                                }
                            }
                        }
                        if ($flag) {
                            $transaction->commit();
                            return $this->redirect(['view', 'id' => $model->id]);
                        }
                    } catch (Exception $e) {
                        $transaction->rollBack();
                    }
                }
    //            $model->save();
    //            return $this->redirect(['view', 'id' => $model->id]);
            }

            return $this->render('update', [
                'model' => $model,
                'modelOrderLineItems'=> (empty($modelOrderLineItems)) ? [new OrderLineItem] : $modelOrderLineItems
            ]);
        }

我发现了我的错误。我没有将变量$modelOrderLineItems从update.php传递到_form.php


这就解决了问题。

必须是拼写错误的变量名,或者变量没有以
的形式传递给
。添加有问题的
update.php
。我已经检查了拼写。我已传递了变量,但无法确保其正确性。添加问题中的
update.php
您没有将
$modelOrderLineItems
update.php
传递到
\u form.php
,这就是它看起来的样子,您是对的@英萨斯库,谢谢你发现错误并帮助我解决问题