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,
    ]);