我试图根据session中的值在header中显示登录/注销链接。我试过这样做
<ul class="nav navbar-nav navbar-right text-uppercase">
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'site/contactus' ] ); ?>">Contact</a></li>
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'site/modules' ] ); ?>">FAQ</a></li>
<?php
$session = Yii::$app->session;
$user_id = $session->get('userid');//print_r($user_id);die();
if($user_id != null)
{?>
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'userdetails/logout' ] ); ?>">Logout</a></li>
<?php}
else
{?>
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'userdetails/login' ] ); ?>">Login</a></li>
<?php } ?>
</ul>
则两个链接都没有出现在标题中(登录/注销)。然后经过大量的尝试,我想出了这个代码
<ul class="nav navbar-nav navbar-right text-uppercase">
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'site/contactus' ] ); ?>">Contact</a></li>
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'site/modules' ] ); ?>">FAQ</a></li>
<?php
$session = Yii::$app->session;
$user_id = $session->get('userid');//print_r($user_id);die();
if($user_id != null)
{
?>
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'userdetails/logout' ] ); ?>">Logout</a></li>
<?php
}
else
{
?>
<li><a href="<?php echo 'Yii::$app->getUrlManager()->createUrl( [ 'userdetails/login' ] ); ?>">Login</a></li>
<?php
}
?>
</ul>
代码实际上是相同的,但我在花括号"{"之间添加了一些空格。而且效果如我所愿。空间是一个问题,当我们使用html和yii2代码组合?
这与Yii无关,这只是一个php语法问题(你应该总是在<?php
之后有一个空格)…
如果你想混合条件和html输出,并且有更好的可读性,你应该使用:
<?php if ($user_id != null) : ?>
Output 1
<?php else : ?>
Output 2
<?php endif; ?>
阅读更多:http://php.net/manual/en/control-structures.alternative-syntax.php
在开始的<?php
标签后面有一个空格,这意味着<?php}
无效:
$ cat z.php
<?php if(true) {?>
true
<?php} else {?> // note, no space after <?php
false
<?php }?>
$ php z.php
true
<?php} else {?>
false
与空间:$ cat y.php
<?php if(true) {?>
true
<?php } else {?>
false
<?php }?>
$ php y.php
true
注意输出的差异。这与Yii无关,而与您的核心PHP编码有关。