How to Disable a button in Yii2

12,037

Solution 1

If you are just checking for logged in user then Use !Yii::$app->user->isGuest and you forget echo:

if (!Yii::$app->user->isGuest) {
        echo Html::a('Create a Project', ['create'], ['class' => 'btn btn-primary btn-xs'])
} 

Solution 2

You need to add a disabled attribute to disable the button, or to hide it completely you can use CSS style=display: none;

Both are used in the code below

<p>
    <?php
        if (Yii::$app->user->isGuest) {
            // This button will be displayed, but is disabled 
            Html::a('Create a Project', ['create'], ['class' => 'btn btn-primary btn-xs', 'disabled' => 'disabled']);
        } elseif(Yii::$app->user->identity->username) {
            Html::a('Create a Project', ['create'], ['class' => 'btn btn-success']);
        } else {
            // This button will not be displayed (it is hidden)
            Html::a('Create a Project', ['create'], ['class' => 'btn btn-primary btn-xs', 'style' => 'display: none;']);
        }
    ?>
</p>

Solution 3

First of all you cannot disable a tag. disabled attribute works fine on Button tags eg:

<?= Html::Button('Project', ['class' => 'btn btn-success', 'disabled' => Yii::$app->user->isGuest ]) ?>

If you really want to disable a tag then you can use this example:

HTML:

<a id="a1" href="http://www.google.com">Google 1</a>

Javascript:

$('#a1').attr('disabled', 'disabled');

$('a').on('click', function(e) {
    if ($(this).attr('disabled') == 'disabled') {
        e.preventDefault();
    }
});
Share:
12,037
mandev
Author by

mandev

Updated on June 27, 2022

Comments

  • mandev
    mandev almost 2 years

    I'm trying to disable the Create Project Button when the user is not logged in, the button will Hide or disable.

    And this is my condition:

    <p>
        <?php
        if (Yii::$app->user->isGuest) {
            Html::a('Create a Project', ['create'], ['class' => 'btn btn-primary btn-xs']);
        } elseif(Yii::$app->user->identity->username) {
            Html::a('Create a Project', ['create'], ['class' => 'btn btn-success']);
        }
        ?>
    </p>
    

    It's working, But, when the user is logged in, the button is already Hide!

    How can disable or hide the button in Yii2 and fix that problem?

    is there any tutorial about that?