在布局内渲染视图

Rendering views inside layouts

我正在尝试在 main.php 布局中使用表单。表单位于视图文件夹中,其中包含与我的时事通讯模型和控制器相关的视图。

到目前为止,我已尝试创建以下小部件:**

<?php
namespace app\components;

use app\models\Newsletter;
use yii\base\Widget;
use yii\helpers\Html;


class NewsletterForm extends Widget

{
    public function run()
{ 
    $model = new Newsletter;

    return $this->render('_form', [
        'model' => $model
    ]);
}
}

?>

小部件位于:app\components\NewsletterForm。php

我有一个名为 Newsletter.php 的数据库模型和一个名为 newsletter 的数据库 table。

app\views 中有一个名为时事通讯的文件夹。此文件夹作为 _form.php,我希望用户在其中输入姓名和电子邮件以接收时事通讯。

问题是我需要在 main.php

的页脚中加载 views\newsletter 中的 _form

当我使用小部件时,我总是收到错误消息:

The view file does not exist: /Applications/MAMP/htdocs/beladona/components/views/_form.php

如何在 views\newsletter\_form.php 中呈现表单。 表单需要在 main.php

的页脚内呈现

在与 OP 广泛讨论后,我们认为小部件不适合他的用例。小部件旨在成为独立的代码片段,能够在不同情况下重复使用。他只想从现有的 MVC 组合渲染一个视图文件

这就是我们的决定;

正在使用的布局是 main.php 我们对此进行了以下编辑;

use app\models\Newsletter;

echo $this->render('@app/views/site/_index', 'model' => new Newsletter);

这样做的好处是可以保留他正在使用的现有表格。

然后他需要指定要在表单中使用的 controller/action 组合,如下所示;

$form = ActiveForm::begin([ 
'action' => Url::to(['newsletter/create']) 
]);