[英]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
我將描述以下代碼。
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,
]);
}
}
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
]
]);
}
}
<div class="buku-bank-create-by-kasbon">
<?php echo $this->render('_form-pengeluaran-by-kasbon', [ # Failed to load
'model' => $model,
'modelsDetail' => $modelsDetail,
]) ?>
</div>
<?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.