简体   繁体   English

如果在PHP数组中,则为简写形式

[英]Shorthand if in PHP Array

Shorthand if in a PHP array won't work, even if I surround the true in braces. 即使在括号中包含true,也无法在PHP数组中使用速记。

The working code: 工作代码:

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']
            ],
    ],
]);

The not working code: 不起作用的代码:

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']
            ],
    ],
]);

I understand what the problem is, but can't figure out a workarround for it. 我知道问题出在哪里,但无法解决。 Any ideas? 有任何想法吗?

You have to have have each part of the code evaluate to something legal - this is not legal: 您必须让代码的每个部分都评估为合法-这是不合法的:

Yii::$app->user->isGuest ?
        (['label' => 'Registrieren', 'url' => ['/site/register']],
        ['label' => 'Login', 'url' => ['/site/login']])

because it would evaluate to 因为它将评估为

['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']]

that would only be valid if their were another set of [] around the whole thing - for example, you could not do: 仅当它们在整个事情上都是另一套[]时才有效-例如,您不能这样做:

$x = ['label' => 'Registrieren', 'url' => ['/site/register']],
['label' => 'Login', 'url' => ['/site/login']];

but you could do 但是你可以做

$x = [
    ['label' => 'Registrieren', 'url' => ['/site/register']],
    ['label' => 'Login', 'url' => ['/site/login']]
];

Your code needs to be more like 您的代码需要更像

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

This line looks wrong: 这行看起来是错误的:

(['label' => 'Registrieren', 'url' => ['/site/register']]

You have one opening brace '(' but two closing ']' braces, you probably want to remove one of those 您有一个右括号“(”,但有两个右括号“]”,您可能想删除其中一个

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM