Yii2:如何在一个视图中使用两个模型?
Yii2: how to use two models in one view?
我有一个名为 Person.php 的模型和一个名为 Country.php 的模型。
然后我有视图 Persons/create.php
我包含了国家/地区的模型,我调用了 $modelCountry 但它不起作用。我收到错误:
Undefined variable: modelCountry
这是 model/Persons.php 文件。
<?php
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model app\models\Person */
/* @var $modelCountry app\models\Country */
?>
<div class="person-create">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'phone')->textInput() ?>
<?= $form->field($modelCountry, 'name')->textInput() ?>
<?= Html::submitButton($model->isNewRecord ? 'Create') ?>
<?php ActiveForm::end(); ?>
</div>
然后我想使用发送按钮将两个模型发送到控制器(controllers/PersonsController.php)
看来你想一次输入两个不同的模型
为此,您不需要在视图中包含第二个模型,但在控制器中,您应该为 class 创建模型。传递给 createView 并正确管理提交的值,然后最后渲染视图
public function actionCreate()
{
$model = new Person();
$modelCountry = new Country()
if ($model->load(Yii::$app->request->post('Person') && ($modelCoutr->load(Yii::$app->request->post('Country')) {
$model->save();
$modelCountry->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
'modelCountry' => $modelCountry,
]);
}
}
在渲染函数的动作视图中添加您需要的模型
public function actionView($id)
{
$yourModelCountry = Country::find()->where(...)->one();
return $this->render('view', [
'model' => $this->findModel($id),
'modelCountry' => $yourModelCountry ,
]);
}
然后在您看来,您可以使用 $model 作为模型,使用 $modelCountry 作为 yourModelCountr
您需要将变量 modelCountry
传递给您的视图文件
在您的控制器操作中:
return $this->render('create', [
'model' => $model,
'modelCountry' => $modelCountry,
]);
我有一个名为 Person.php 的模型和一个名为 Country.php 的模型。 然后我有视图 Persons/create.php
我包含了国家/地区的模型,我调用了 $modelCountry 但它不起作用。我收到错误:
Undefined variable: modelCountry
这是 model/Persons.php 文件。
<?php
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model app\models\Person */
/* @var $modelCountry app\models\Country */
?>
<div class="person-create">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'phone')->textInput() ?>
<?= $form->field($modelCountry, 'name')->textInput() ?>
<?= Html::submitButton($model->isNewRecord ? 'Create') ?>
<?php ActiveForm::end(); ?>
</div>
然后我想使用发送按钮将两个模型发送到控制器(controllers/PersonsController.php)
看来你想一次输入两个不同的模型
为此,您不需要在视图中包含第二个模型,但在控制器中,您应该为 class 创建模型。传递给 createView 并正确管理提交的值,然后最后渲染视图
public function actionCreate()
{
$model = new Person();
$modelCountry = new Country()
if ($model->load(Yii::$app->request->post('Person') && ($modelCoutr->load(Yii::$app->request->post('Country')) {
$model->save();
$modelCountry->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
'modelCountry' => $modelCountry,
]);
}
}
在渲染函数的动作视图中添加您需要的模型
public function actionView($id)
{
$yourModelCountry = Country::find()->where(...)->one();
return $this->render('view', [
'model' => $this->findModel($id),
'modelCountry' => $yourModelCountry ,
]);
}
然后在您看来,您可以使用 $model 作为模型,使用 $modelCountry 作为 yourModelCountr
您需要将变量 modelCountry
传递给您的视图文件
在您的控制器操作中:
return $this->render('create', [
'model' => $model,
'modelCountry' => $modelCountry,
]);