2015-12-13 4 views
2

Я пытаюсь использовать форму в макете 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 
    ]); 
} 
} 

?> 

виджет находится в каталоге: приложение \ Components \ NewsletterForm.php

У меня есть модель БД под названием Информационный бюллетень. php и таблицу базы данных, называемую информационным бюллетенем.

Существует папка внутри app \ views, называемая информационным бюллетенем. Эта папка как _form.php, где я хочу, чтобы пользователь вводил имя и адрес электронной почты для получения информационного бюллетеня.

Проблема в том, мне нужно загрузить _form в Views \ бюллетень в сноске main.php

Когда я использую виджет я всегда получаю ошибку:

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

Как я могу вынести форма внутри views \ newsletter \ _form.php. Форма должна визуализироваться внутри нижнего колонтитула main.php

ответ

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']) 
]); 
+0

Давайте [продолжить это обсуждение в чате] (http://chat.stackoverflow.com/rooms/97784/discussion-between-joe-miller-and-andre-castro). –