簡體   English   中英

可重用動作 Yii2,加載表單視圖失敗

[英]Reusable action Yii2, failed load form view

我想在 controller 中創建一個可重用的操作。 Yii2 通常會創建以下視圖:

 update -> render form
 create -> render form

問題是,我未能加載此form

Yii2 拋出錯誤Call to a member function isAttributeRequired() on string

這是我的應用程序目錄的列表。

  • 模塊
    • 金融
      • 行動 - BuatPengeluaranDiBukuBankAction.php

      • 控制器 - BukuBankController.php

      • 意見 - buku-bank

         * create-pengeluaran-by-kasbon.php * _form-pengeluaran-by-kasbon

我將描述以下代碼。

BuatPengeluaranDiBukuBankAction.php

class BuatPengeluaranDiBukuBankAction extends Action {

    public $modelClass;
    public $modelsDetailClass;

    public function run() {

        $request = Yii::$app->request;

        if($this->modelClass->load($request->post)){
           ... save here & redirect
        }
        
        ### Calling view 
        return $this->controller->render('create-pengeluaran-by-kasbon', [
           'model' => $this->modelClass,
           'modelsDetail' => empty($this->modelsDetailClass) ? [new BukuBankDetail()] : $this->modelsDetailClass,
        ]);
    }
}

BukuBankController.php

class BukuBankController extends Controller {

    public function actions() {
        return ArrayHelper::merge(parent::actions(),[
            'create-pengeluaran-by-kasbon' => [
                'class' => BuatPengeluaranDiBukuBankAction::class,
                'modelClass' => BukuBank::class,
                'modelsDetailClass' => BukuBankDetail::class
            ]
        ]);

    }
}

create-pengeluaran-by-kasbon.php

<div class="buku-bank-create-by-kasbon">
    <?php echo $this->render('_form-pengeluaran-by-kasbon', [ # Failed to load
        'model' => $model,
        'modelsDetail' => $modelsDetail,
    ]) ?>
</div>

_form-pengeluaran-by-kasbon

 <?php $form = ActiveForm::begin([
        'id' => 'dynamic-form',
        /*'type' => ActiveForm::TYPE_HORIZONTAL,
        'formConfig' => ['labelSpan' => 3, 'deviceSize' => ActiveForm::SIZE_SMALL]*/
    ]); ?>

   .... lot of field here

 <?php ActiveForm::end(); ?>

怎么了

'modelClass' => BukuBank::class,
'modelsDetailClass' => BukuBankDetail::class

作為字符串而不是對象傳遞給您的操作 class 所以在使用之前,您需要實例化(創建)此模型(對象),請參見下面的代碼和注釋。

class BuatPengeluaranDiBukuBankAction extends Action {

    public $modelClass;
    public $modelsDetailClass;

    public function run() {

        $request = Yii::$app->request;

         // create instances of models here
        $model = Yii::createObject($this->modelClass);
        $modelsDetails = Yii::createObject($this->modelsDetailClass);


        // now you can use models
        if($model->load($request->post)){
            ... save here & redirect
        }
    
        ### Calling view 
        return $this->controller->render('create-pengeluaran-by-kasbon', [
            'model' => $model,
            'modelsDetail' => $modelsDetails,
        ]);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM