yii: просто пытаюсь показать невинную форму с помощью конструктора форм

Я просто пытаюсь показать форму используя конструктор форм, но поля не отображаются. Это код:

register.php

entered here
<div class="form">
   <?php echo $form?>
</div>

РегистрФорма.php

class RegisterForm extends CFormModel {

    public $name;
}

MyController.php

public function actionRegister()
{   
    $model = new RegisterForm();

    $config=array(
            'elements'=>array(
                'name'=>array(
                    'type'=>'text',
                    ),  
                ),  
            );  

    $form = new CForm($config, $model);

    $this->render('register', array('form' => $form));
 }  

ИЗМЕНИТЬ 1:

Мне не хватало правил в RegisterForm.php..

public function rules()
{   
    return array(
        array('name', 'required'),
    );  
}   

значит правила обязательны??? Во всяком случае, меня также интересует отображение полей отдельно, поэтому я попробовал это:

<div class="form">
<?php echo CHtml::beginForm(); ?>
     <?php echo CHtml::activeTextField($form,'name') ?>
     <?php echo CHtml::endForm(); ?>
</div>

но я получаю эту ошибку:

CForm and its behaviors do not have a method or closure named "getValidators".

/home/javiergarcia/programacion/libs/yii/framework/base/CComponent.php(266)

254     public function __call($name,$parameters)
255     {
256         if($this->_m!==null)
257         {
258             foreach($this->_m as $object)
259             {
260                 if($object->getEnabled() && method_exists($object,$name))
261                     return call_user_func_array(array($object,$name),$parameters);
262             }
263         }
264         if(class_exists('Closure', false) && $this->canGetProperty($name) && $this->$name instanceof Closure)
265             return call_user_func_array($this->$name, $parameters);
266         throw new CException(Yii::t('yii','{class} and its behaviors do not have a method or closure named "{name}".',
267             array('{class}'=>get_class($this), '{name}'=>$name)));
268     }

ИЗМЕНИТЬ 2:

После комментария dInGd0nG:

object(CForm)#35 (17) {
  ["title"]=>
  NULL
  ["description"]=>
  NULL
  ["method"]=>
  string(4) "post"
  ["action"]=>
  string(0) ""
  ["inputElementClass"]=>
  string(17) "CFormInputElement"
  ["buttonElementClass"]=>
  string(18) "CFormButtonElement"
  ["attributes"]=>
  array(0) {
  }
  ["showErrorSummary"]=>
  bool(false)
  ["activeForm"]=>
  array(1) {
    ["class"]=>
    string(11) "CActiveForm"
  }
  ["_model":"CForm":private]=>
  object(my-firm\web\models\forms\RegisterOrganizationForm)#34 (9) {
    ["organization_name"]=>
    NULL
    ["email"]=>
    NULL
    ["password"]=>
    NULL
    ["repeatPassword"]=>
    NULL
    ["_errors":"CModel":private]=>
    array(0) {
    }
    ["_validators":"CModel":private]=>
    NULL
    ["_scenario":"CModel":private]=>
    string(0) ""
    ["_e":"CComponent":private]=>
    NULL
    ["_m":"CComponent":private]=>
    NULL
  }
  ["_elements":"CForm":private]=>
  object(CFormElementCollection)#36 (6) {
    ["_form":"CFormElementCollection":private]=>
    *RECURSION*
    ["_forButtons":"CFormElementCollection":private]=>
    bool(false)
    ["_d":"CMap":private]=>
    array(1) {
      ["organization_name"]=>
      object(CFormInputElement)#37 (15) {
        ["type"]=>
        string(4) "text"
        ["name"]=>
        string(17) "organization_name"
        ["hint"]=>
        NULL
        ["items"]=>
        array(0) {
        }
        ["errorOptions"]=>
        array(0) {
        }
        ["enableAjaxValidation"]=>
        bool(true)
        ["enableClientValidation"]=>
        bool(true)
        ["layout"]=>
        string(30) "{label}
{input}
{hint}
{error}"
        ["_label":"CFormInputElement":private]=>
        NULL
        ["_required":"CFormInputElement":private]=>
        NULL
        ["attributes"]=>
        array(0) {
        }
        ["_parent":"CFormElement":private]=>
        *RECURSION*
        ["_visible":"CFormElement":private]=>
        NULL
        ["_e":"CComponent":private]=>
        NULL
        ["_m":"CComponent":private]=>
        NULL
      }
    }
    ["_r":"CMap":private]=>
    bool(false)
    ["_e":"CComponent":private]=>
    NULL
    ["_m":"CComponent":private]=>
    NULL
  }
  ["_buttons":"CForm":private]=>
  NULL
  ["_activeForm":"CForm":private]=>
  NULL
  ["_parent":"CFormElement":private]=>
  object(SiteController)#24 (19) {
    ["layout"]=>
    string(14) "//layouts/main"
    ["menu"]=>
    array(0) {
    }
    ["breadcrumbs"]=>
    array(0) {
    }
    ["baseUrl"]=>
    string(15) "//my-firm.local"
    ["assetsUrl"]=>
    string(16) "/assets/e876fe71"
    ["bodyClass"]=>
    string(9) "sidebar-3"
    ["_viewVars":"my-firm\core\Controller":private]=>
    array(2) {
      ["model"]=>
      object(my-firm\web\models\forms\LoginForm)#31 (9) {
        ["email"]=>
        NULL
        ["pass"]=>
        NULL
        ["rememberMe"]=>
        NULL
        ["_identity":"my-firm\web\models\forms\LoginForm":private]=>
        NULL
        ["_errors":"CModel":private]=>
        array(0) {
        }
        ["_validators":"CModel":private]=>
        NULL
        ["_scenario":"CModel":private]=>
        string(0) ""
        ["_e":"CComponent":private]=>
        NULL
        ["_m":"CComponent":private]=>
        NULL
      }
      ["linkSchools"]=>
      string(39) "https://my-firm.local/escoles/espana/76"
    }
    ["defaultAction"]=>
    string(5) "index"
    ["_id":"CController":private]=>
    string(4) "site"
    ["_action":"CController":private]=>
    object(CInlineAction)#32 (4) {
      ["_id":"CAction":private]=>
      string(20) "RegisterOrganization"
      ["_controller":"CAction":private]=>
      *RECURSION*
      ["_e":"CComponent":private]=>
      NULL
      ["_m":"CComponent":private]=>
      NULL
    }
    ["_pageTitle":"CController":private]=>
    NULL
    ["_cachingStack":"CController":private]=>
    NULL
    ["_clips":"CController":private]=>
    NULL
    ["_dynamicOutput":"CController":private]=>
    NULL
    ["_pageStates":"CController":private]=>
    NULL
    ["_module":"CController":private]=>
    NULL
    ["_widgetStack":"CBaseController":private]=>
    array(0) {
    }
    ["_e":"CComponent":private]=>
    NULL
    ["_m":"CComponent":private]=>
    NULL
  }
  ["_visible":"CFormElement":private]=>
  NULL
  ["_e":"CComponent":private]=>
  NULL
  ["_m":"CComponent":private]=>
  NULL
}

Хавьер


person user1077220    schedule 07.06.2012    source источник
comment
попробуйте var_dump($form) в MyController перед $this->render() и вставьте сюда o/p   -  person dInGd0nG    schedule 07.06.2012
comment
Я думаю, ваша ошибка в той части, где вы хотите показать поля отдельно, что именно вы пытаетесь там сделать?   -  person bool.dev    schedule 07.06.2012
comment
Я просто пытаюсь показать имя поля.   -  person user1077220    schedule 07.06.2012
comment
хорошо, тогда все, что вы видите, это <div class="form"> <?php echo $form?> </div> ?   -  person bool.dev    schedule 07.06.2012
comment
Нет, теперь у меня есть ‹div class=form› ‹?php echo CHtml::beginForm(); ?› ‹?php echo CHtml::activeTextField($form,'name') ?› ‹?php echo CHtml::endForm(); ?› ‹/дел›   -  person user1077220    schedule 07.06.2012
comment
проблемы с пониманием/реализацией решения?   -  person bool.dev    schedule 08.06.2012
comment
+1 за невинную форму!   -  person bool.dev    schedule 08.06.2012


Ответы (1)


Чтобы отобразить форму по-другому, вы можете использовать следующее:

<div class="form">
 <?php echo $form->renderBegin(); ?>
 <?php echo $form['name']; ?>
 <?php echo $form->renderEnd(); ?>
</div>

Вы можете использовать активные помощники, но им нужен класс, производный от CModel, а не производный от CForm, поэтому вам нужно сделать это (доступ к модели через CForm):

<div class="form">
 <?php echo CHtml::beginForm(); ?>
 <?php echo CHtml::activeTextField($form->model,'name') ?>
 <?php echo CHtml::endForm(); ?>
</div>
person bool.dev    schedule 07.06.2012
comment
извините, вы можете использовать активные помощники, но обратившись к свойству model CForm - person bool.dev; 07.06.2012
comment
хорошо, рад помочь. в следующий раз, однако, попробуйте и прокомментируйте раньше, и сообщите ответчику, если у вас есть сомнения, таким образом, все может быть решено быстрее. - person bool.dev; 08.06.2012