在Yii中的layouts main.php中显示登录表单
我想更改views/layouts/main.php,以便在用户未经身份验证时显示登录表单 因此,我更改了siteController操作索引,如下所示:在Yii中的layouts main.php中显示登录表单,yii,Yii,我想更改views/layouts/main.php,以便在用户未经身份验证时显示登录表单 因此,我更改了siteController操作索引,如下所示: public function actionIndex() { $loginForm = new LoginForm(); $this->render('index', array('loginForm'=>$loginForm)); } if(Yii::app()->user->isGuest):
public function actionIndex() {
$loginForm = new LoginForm();
$this->render('index', array('loginForm'=>$loginForm));
}
if(Yii::app()->user->isGuest):
echo $loginForm;
else :
echo 'JJJ';
endif;
然后在views/layouts/main.php中调用它,如下所示:
public function actionIndex() {
$loginForm = new LoginForm();
$this->render('index', array('loginForm'=>$loginForm));
}
if(Yii::app()->user->isGuest):
echo $loginForm;
else :
echo 'JJJ';
endif;
然后,当我访问我的网站时,它会显示错误:未定义变量:loginForm
我不知道怎么解决这个问题 在控制器类中定义新属性:
public $loginForm;
在main.php中,按如下方式访问它:
echo $this->loginForm;
如果在渲染方法中传递变量,它将仅在视图文件中可用,但在布局文件中不可用。这是因为索引模板在主模板之前加载。所以,更好的方法就是在控制器中定义一个公共属性。我建议您在控制器类中定义此属性,因为SiteController和*Controller扩展了它
然后,你可以运行这个
if(Yii::app()->user->isGuest) {
echo $this->loginForm;
} else {
echo 'JJJ';
}
请注意,因为在这种工作方式中,您将采用MVC模式。这种工作方式迫使您在每个操作中定义LoginForm。我建议你这样做:
保留对渲染文件的干净调用
public function actionIndex() {
$this->render('index');
}
并在控制器类中添加getLoginForm方法,以获得:
if(Yii::app()->user->isGuest) {
echo $this->getLoginForm();
} else {
echo 'JJJ';
}
这里有几个问题。首先,您要创建一个名为$loginForm的对象,并将其赋值为newloginform 我不确定您是否有意这样做,而LoginForm是一个函数或一个返回某些内容的方法,但我感觉您有意这样做:
$loginForm = new LoginForm;
它创建了LoginForm类的一个新实例,LoginForm是一个默认的Yii webapp类。即使是这样,也有更好的方法
最简单的方法是调用index.php视图中protected/views/site/login.php中已经存在的login.php视图的renderPartial,如下所示:
if(Yii::app()->user->isGuest) {
$this->renderPartial("loginform",array("model"=>new LoginForm));
} else {
echo 'JJJ';
}
这将在不呈现布局的情况下呈现view login.php,因为我们已经呈现了布局-on render和renderPartial,并将分配给名为$model的变量的模型LoginForm的新实例传递给它
您很可能需要编辑login.php视图的外观以使其适合,但请记住,SiteController actionLogin中也使用了此视图
接下来要做的就是修改actionIndex以处理表单提交,您只需复制现有的SiteController actionLogin功能即可
另一个更好的解决方案是为登录表单创建一个小部件,它可以在应用程序中使用。我不打算讨论这个问题,但是你可以在这里读到,或者去看看,或者 对不起,它坏了。错误消失,但表单未显示。此表单创建表单模型类的对象www.yiiframework.com/doc/guide/1.1/en/form.model. 它不会呈现窗体。你需要明确地做到这一点,就像在最初的文章中一样。