Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未能初始化yii中未设置的小部件模型_Php_Twitter Bootstrap_Yii_Yii Extensions - Fatal编程技术网

Php 未能初始化yii中未设置的小部件模型

Php 未能初始化yii中未设置的小部件模型,php,twitter-bootstrap,yii,yii-extensions,Php,Twitter Bootstrap,Yii,Yii Extensions,使用Yii引导扩展创建模式登录小部件时出错 CEException错误-TbInput:未能初始化小部件!未设置型号。 怎么了 这是我的源代码- 登录按钮代码- in /views/layouts/main.php <?php if (Yii::app()->user->isGuest): ?> $this->widget('bootstrap.widgets.TbButton', array( 'size' => '

使用Yii引导扩展创建模式登录小部件时出错

CEException错误-TbInput:未能初始化小部件!未设置型号。

怎么了

这是我的源代码-

登录按钮代码-

in /views/layouts/main.php

<?php if (Yii::app()->user->isGuest): ?>
        $this->widget('bootstrap.widgets.TbButton', array(
            'size' => 'large',
            'label' => 'login',
            'url' => '#login-modal',
            'htmlOptions' => array(
              'data-toggle' => 'modal',
              'onclick' => '$("#error-div").hide();$("#LoginForm_username").focus();'),
            )
         );

         endif;

      $this->renderPartial("_ajax_login_form");
    ?>

login.php

<?php $this->beginWidget('bootstrap.widgets.TbModal', array(
        'id' => 'login-modal'
          )
      ); ?>
    <div class="modal-header">
        <a class="close" data-dismiss="modal">&times;</a>
        <h3>login</h3>
    </div>
    <div class="modal-body">
    <?php
        $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
            'id' => 'LoginForm',
            'htmlOptions' => array(
                'class' => 'well'),
            )
         );
?>
    <div id="error-div" class="alert alert-block alert-error" style="display:none;">
    </div>    
    <?php echo $form->textFieldRow($login_form_model, 'username', array(
                            'class' => 'span3'
                            )
                      ); ?>
    <?php echo $form->passwordFieldRow($login_form_model, 'password', array(
                             'class' => 'span3'
                             )
                      ); ?>
    <?php $this->widget('bootstrap.widgets.TbButton', array(
            'buttonType' => 'ajaxSubmit', 
            'icon' => 'ok', 
            'label' => 'Submit', 
            'ajaxOptions' => array(
            'success' => 
      'function(data){
        var obj = $.parseJSON(data);
        if(obj.login=="success"){
            $("#login-modal").modal("hide");
            setTimeout(function(){location.reload(true);},400);
        }else{
            $("#error-div").show();
            $("#error-div").html("");
            if("LoginForm_password" in obj){
                $("#error-div").html(obj.LoginForm_password[0]+"<br />");
            }
            if("LoginForm_username" in obj){
                $("#error-div").append(obj.LoginForm_username[0]);
            }
        }
    }'),
));

 $this->endWidget(); ?>
     </div>
<?php $this->endWidget(); ?>
public function actionLogin(){

  //$this->layout = 'main';
  $model = new LoginForm();

  if(isset($_POST['ajax']) && $_POST['ajax'] === 'login-form')
    {
      echo CActiveForm::validate($model, array('username', 'password', 'verifyCode'));
      Yii::app()->end();
    }

  if (isset($_POST['LoginForm'])) {
        $login_form_model->attributes = $_POST['LoginForm'];
        if ($login_form_model->validate() and $login_form_model->login()) {
            $array = array('login' => 'success');
            Yii::app()->user->setFlash('success', 'Successfully logged in.');
            $json = json_encode($array);
            echo $json;
            Yii::app()->end();
        } else {
            echo CActiveForm::validate($login_form_model);
            Yii::app()->end();
        }
    }

  $this->render('login', array(
    'model' => $model,
    ));
 }
<?php 

 $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
      'id' => 'login-form',
      'enableClientValidation' => true,
      'htmlOptions' => array('class' => 'well'),
      'clientOptions' => array(
            'validateOnSubmit' => true,
        ),
     )); ?>
<?php echo $form->textFieldRow($model, 'username', array('class' => 'span3'));?>
<?php echo $form->passwordFieldRow($model, 'password', array('class' => 'span3'));?> 
<?php echo $form->checkBoxRow($model, 'rememberMe');?>
<?php $this->widget('bootstrap.widgets.TbButton', array('buttonType' => 'submit', 'type' => 'primary', 'label' => 'Submit', 'icon' => 'ok'));?>
<?php $this->widget('bootstrap.widgets.TbButton', array('buttonType' => 'reset', 'label' => 'Reset'));?>
 <?php $this->endWidget(); ?>


请帮助我解决我的错误。

由于您没有将
$model
正确传递到视图,因此生成了错误

SiteController.php中的
actionLogin()
更改为

public function actionLogin(){

 //$this->layout = 'main';
 $model = new LoginForm();

 if(isset($_POST['ajax']) && $_POST['ajax'] === 'login-form')
 {
    echo CActiveForm::validate($model, array('email', 'password', 'verifyCode'));
    Yii::app()->end();
 }

 if (isset($_POST['LoginForm'])) {
    $model->attributes = $_POST['LoginForm'];
    if ($model->validate() and $model->login()) {
        $array = array('login' => 'success');
        Yii::app()->user->setFlash('success', 'Successfully logged in.');
        $json = json_encode($array);
        echo $json;
        Yii::app()->end();
    } else {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
 }

 $this->render('login', array(
    'model' => $model,
  ));
}
main.php文件中需要的更改

 $login_form_model = new LoginForm();
 $this->renderPartial("_ajax_login_form",  array( 
                        'login_form_model' => $login_form_model,
                         )
                     );

您没有将
$login\u form\u model
传递到SiteController中的视图。它应该类似于
$this->render('login',array('model'=>$model,'login\u form\u model'=>$login\u form\u model,)@ThinkDifferent请您更新我的SiteController.php好吗???@ThinkDifferent仍然不工作。。。显示相同的错误。正如我从SiteController中看到的,如果您将actionLogin更改为以下答案,它应该可以工作。@ThinkDifferent他们需要您的帮助。。。您能给我您的电子邮件id吗???仍然显示相同的错误-TbInput:未能初始化小部件!未设置模型。Ahhhh是的,它在main.php布局中,即使在那里,您也没有传递模型。您需要在这一行中传递模型
$this->renderPartial(“\u ajax\u login\u form”)。正是因为这个原因,你才会出错。我不建议你编辑核心文件。我已经更新了答案,但我认为您不会根据控制器和操作更改activeform操作。例如,您将代码n放入main.php布局,它将在登录页面上工作,但在其他页面上不工作。无论如何,这是另一个问题。我已经更新了答案,你可以检查一下,看看它是否解决了问题。这很好。确定我会验证您需要验证的内容吗?如果您只需要用户名和密码不是空的,那么只需在LoginForm模型中的rules()函数下添加规则,如:
returnarray(array('username,password','required'),