如果在PHP数组中,则为Shorthand


Shorthand if in PHP Array

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']]

你有一个左大括号"("但有两个右大括号"]",你可能想删除其中一个