PHP数组中的Shorthand if不起作用,即使我用大括号括住true。
工作代码:
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => [
Yii::$app->user->isGuest ?
['label' => 'Login', 'url' => ['/site/login']] :
[
'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post']
],
],
]);
无效代码:
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => [
Yii::$app->user->isGuest ?
(['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']]) :
[
'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post']
],
],
]);
我知道问题出在哪里,但想不出解决办法。有什么想法吗?
您必须让代码的每个部分都评估为合法的东西-这是不合法的:
Yii::$app->user->isGuest ?
(['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']])
因为它会评估
['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']]
只有当它们是围绕整件事的另一组[]
时,这才有效——例如,你不能这样做:
$x = ['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']];
但是你可以做
$x = [
['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']]
];
你的代码需要更像
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => Yii::$app->user->isGuest ?
[
['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']]
] :
[
[
'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post']
]
]
]);
这行看起来不对:
(['label' => 'Registrieren', 'url' => ['/site/register']]
你有一个左大括号"("但有两个右大括号"]",你可能想删除其中一个