2015-10-07 6 views
0

Я попытался показать ссылку входа/выхода в мой заголовок на основе значения в сеансе. я пробовал что-то вроде этогоНеожиданное поведение If-Else

<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?

+1

попытаться использовать '! Empty ($ user_id)' – GAMITG

+0

сеанс имел значение, даже тогда ссылка не появилась. также даже если условие не сработало, другое должно было сработать, но оно не – Bloodhound

+2

'

ответ

2

Это не имеет ничего общего с 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

1

Там ИМЕЕТ быть пробел после открытия <?php тега, который означает, s <?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-кодированием.