Нужно ли сокращать две-три строчки повторяющегося 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']) );
}
}