Как поместить текстовое поле yiibooster внутрь /view/layout/main.php в Yii

Я использую YiiBooster и пытаюсь создать TextField внутри TbActiveForm внутри /views/layouts/main.php

Для контроллера я добавил:

<?php
    class LayoutsController extends Controller
    {
        public function actionMain()
        {
                    $model=new Item;
                    $this->render('main',array('model'=>$model));
        }
    }
?>

И виды:

<?php 
 $this->beginWidget(
     'booster.widgets.TbActiveForm',
           array(
               'id' => 'inlineForm',
               'type' => 'inline',
                'htmlOptions' => array('class' => 'well'),
           )
      );
 echo $form->textFieldGroup($model, 'textField');
 $this->endWidget();
?>

Но у меня есть небольшая проблема, при попытке запуска появляется сообщение об ошибке:

PHP notice
Undefined variable: model

Может ли кто-нибудь помочь мне исправить это? Спасибо.


person JoenMarz    schedule 13.07.2014    source источник


Ответы (1)


Балл: 1

Если вы используете только $this->widget, то элементы ввода формы (например, текстовые поля, текстовые области, раскрывающиеся списки, флажки и т. д.) будут размещены за пределами формы. . нравится

<form method="post" action="#">

</form>
<!-- and then the input elements of form, like -->
<input type="text" name="textField"> <!-- and so on.... -->

Балл: 2

Для включения элементов внутри формы вы должны начать с

$this->beginWidget
// then the input elements , and finally
$this->endWidget();

Итак, теперь HTML выглядит так

<form method="post" action="#">
    <input type="text" name="textField"> <!-- and so on.... -->
</form>

Балл: 3

Вы должны назначить beginWidget переменной ($form) для включения элементов ввода

Пример ниже

(i) В функции контроллера

public function actionFunctionName()
{
     $model=new ModelClassName;
     $this->render('viewFileName',array('model'=>$model));
}

(ii) Просматриваемый файл

<?php
$form=$this->beginWidget(
    'booster.widgets.TbActiveForm',
    array(
        'id' => 'inlineForm',
        'type' => 'inline',
        'htmlOptions' => array('class' => 'well'),
    )
);
echo $form->textFieldGroup($model, 'textField');
// before the close tag of php
$this->endWidget();
?>

Это работает нормально.

Балл: 4

Если у вас это не работает, проверьте конфигурацию YiiBooster. Я надеюсь, что это будет полезно для вас. :)

person alamincse07    schedule 13.07.2014
comment
Почти сработало, сейчас пришло похожее сообщение; Неопределенная переменная: модель, где/как определить модель $? - person JoenMarz; 15.07.2014
comment
Пожалуйста, обновите ответ, я не нашел способ определить переменную $model. - person JoenMarz; 15.07.2014
comment
@JoenMarz Я обновил свой ответ. просто внимательно следуйте примеру. Вам нужно создать объект модели и присвоить его вириабле ($form). например,.$model=new ModelClassName; & затем передайте переменную для просмотра файла во время рендеринга. например, $this-›render('viewFileName',array('model'=›$model)); - person alamincse07; 15.07.2014
comment
Если вы не понимаете, надеюсь, вам нужно начать с yiiframework .com/doc/guide/1.1/en/basics.best-practices . Это будет лучший способ для вас. :) - person alamincse07; 15.07.2014
comment
Я обновил свою работу, пожалуйста, проверьте. Внутри контроллера (/protected/controllers/LayoutsController.php) уже есть $model=new Item; и передал переменную в мой файл представления во время рендеринга: $this-›render('main',array('model'=›$model)); но тогда сообщение об ошибке по-прежнему является неопределенной переменной: модель - person JoenMarz; 17.07.2014
comment
Вы использовали частичный рендеринг? если это сделать, то необходимо передать объект модели с этим. Или вы можете просто создать объект модели на странице просмотра. В файле представления добавьте эту строку $model=new Item; если имя класса вашей модели Item - person alamincse07; 17.07.2014
comment
Ах вот оно! Спасибо! Теперь это работает. В любом случае, если я уже определил свой внутренний контроллер $model, зачем мне снова переопределять его в представлении? Буду рад еще одному краткому пояснению :) Еще раз спасибо. - person JoenMarz; 18.07.2014