Как узнать id или name у input, которые формирует yii2 ActiveForm
  • 1559

Как получить id и name поля input в формах yii2.

Автор: admin | 04 августа (Сб.) 2018г. в 22ч.51м.

Если для построения форм использовать средства, которые имеются в распоряжении yii2, а именно yii\bootstrap\ActiveForm либо \yii\widgets\ActiveForm , а также создание форм с помощью хелпера yii\helpers\HTML , то в итоге фреймворк сгенерирует весь html код и установит для каждого поля input свой уникальный id и name.

Так, например посмотрим, какой html мы получим на выходе при построении формы входа на сайт:
<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>

<?= $form->field($model, 'username')->textInput(['autofocus' => false]) ?>

<?= $form->field($model, 'password')->passwordInput() ?>

<div class="form-group">
    <?= Html::submitButton(Yii::t('app', 'Login'), ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
</div>

<?php ActiveForm::end(); ?>​

Вот такой html генерирует виджет ActiveForm:

<form id="login-form" action="/login" method="post">
    <input type="hidden" name="_csrf-user" value="wUi2EjHSRVYp45zNlb2coqDImPkajJLfxXQugxlXnSP1e-xle74yDkyU267XzuXE77vZry-10O2CAGbJKT3IdQ==">
    
    <div class="form-group field-loginform-username required">
        <label class="control-label" for="loginform-username">Логин</label>
        <input type="text" id="loginform-username" class="form-control" name="LoginForm[username]" aria-required="true">

        <p class="help-block help-block-error"></p>
    </div>
    
    <div class="form-group field-loginform-password required">
        <label class="control-label" for="loginform-password">Пароль</label>
        <input type="password" id="loginform-password" class="form-control" name="LoginForm[password]" aria-required="true">

        <p class="help-block help-block-error"></p>
    </div>
    
 
    <div class="form-group">
        <button type="submit" class="btn btn-primary" name="login-button">Войти</button>
    </div>
</form>

Так для поля 'username' id в теге input будет иметь значение id="loginform-username" ,а name="LoginForm[username]". В именовании атрибутов в данном случае используется имя класса модели, которая передается в виджет ActiveForm и название свойства из модели. В данном примере модель - LoginForm.

Чтобы программно получить для какого-нибудь свойства, пусть для примера тот же username, его id или атрибут name, можно воспользоваться методами класса хелпера yii\helpers\HTML::getInputId($model, $attribute) и yii\helpers\HTML::getInputName($model, $attribute) соответственно.

//получим id
$tagId = Html::getInputId($model, 'username');//получим loginform-username

//получим name input
$tagName = Html::getInputName($model, 'username');//получим LoginForm[username]

В $model содержится объект нужной модели (той же что и при построении формы).
Далее, зная id или name input можно создавать нужные динамически меняющиеся стили, добавлять javascript и так далее...

При построении форм с помощью хелпера Html узнаем id и name аналогично тому, что мы только что рассмотрели.

Приветствую!

Меня зовут Сергей. Я - автор этого блога.

Если Вам был полезен материал на моем сайте, поддержите пожалуйста мой проект, чтобы о нем узнали другие люди - кликните plizz :) на иконку в соц. сети, чтобы поделиться материалом с другими.