Нужно ли сокращать две-три строчки повторяющегося html-кода в yii2? как лучше?

Во вьюшке index.php имеется условие с необходимостью показа в каждом из них блока отправки данных на почту. Как лучше сократить повторяющийся код? есть ли правило определяющее, когда сокращение неактуально?

<?php $form = ActiveForm::begin(['id' => 'contact-search']); ?>
...
<?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>
    <div class="alert alert-success">
        Сообщение 1: контакты успешно отправлены
    </div>
    <p>
        <?= Html::label('Укажите email получателя:') ?>
        <?= Html::input('text', 'send_to', "") ?>
        <?= Html::submitButton('отправить', ['class' => 'btn btn-primary']) ?>
    </p>

<?php elseif (Yii::$app->session->hasFlash('error')): ?>
    <div class="alert alert-danger">
        Сообщение 2: ошибка отправки
    </div>
    <p>
        <?= Html::label('Укажите email получателя:') ?>
        <?= Html::input('text', 'send_to', "$email") ?>
        <?= Html::submitButton('отправить', ['class' => 'btn btn-primary']) ?>
    </p>

<?php else: ?>
...
    <p>
    <?= Html::label('Укажите email получателя:') ?>
    <?= Html::input('text', 'send_to', "$email") ?>
    <?= Html::submitButton('отправить', ['class' => 'btn btn-primary']) ?>
    </p>
<?php endif ?>
<?php ActiveForm::end(); ?>

Если сами сомневаетесь и считаете себя опытным yii2-разработчиком - тоже скажите - ваше мнение интересно.


Ответы (1 шт):

Автор решения: phpBear

Если у Вас всего два варианта кодов передаваемых в Flashто я бы просто вынес повторяющийся блок ::label, ::input, ::submitButton за оба этих условия.

А вот если кодов много. Тогда возможно Вам подойдет вот такой вариант

<?php
$codes = ['contactFormSubmitted' => ['cssClass' => 'success', 
                                     'message' => 'Сообщение 1: контакты успешно отправлены',
                                    ] ,
          'error' => ['cssClass' => 'danger', 
                                     'message' => 'Сообщение 2: ошибка отправки',
                                    ] ,
            //'' => []  //еще какой-то код                        
         ];
foreach( array_keys( $codes ) as $key ) {
    if ( Yii::$app->session->hasFlash($key ) ) {
        echo Html::tag('div', $codes[ $key ]['message'], [ 'class' => 'alert alert-'.$codes[ $key ]['cssClass'] ] );
        echo Html::tag('p', Html::label('Укажите email получателя:').
                                         Html::input('text', 'send_to', $email).
                                         Html::submitButton('отправить', ['class' => 'btn btn-primary']) );
    }    
}

→ Ссылка