Php 未能初始化yii中未设置的小部件模型
使用Yii引导扩展创建模式登录小部件时出错 CEException错误-TbInput:未能初始化小部件!未设置型号。 怎么了 这是我的源代码-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' => '
登录按钮代码-
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">×</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'),