在布局内渲染视图

时间:2015-12-13 15:04:38

标签: forms widget yii2 render

我正在尝试在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的数据库表。

app \ views中有一个名为newsletter的文件夹。此文件夹为_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的页脚内部呈现

1 个答案:

答案 0 :(得分:4)

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

所以这就是我们所确定的;

正在使用的布局是main.php我们为以下内容编辑了这个;

use app\models\Newsletter;

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

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

然后他需要在表单中指定要使用的控制器/动作组合,如下所示;

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