Нужно перенастроить форму HTML в ActiveForm yii2?

Здравствуйте, имеется сложная для меня форма, помогите её накрутить на ActiveForm

Вот данная форма HTML:
<form name="appointment_form" id="appointment_form" method="post" action="#" onSubmit="return false">

				<span class="input input--kohana">
					<input class="input__field input__field--kohana" type="text" id="input-29" name="input-29" />
					<label class="input__label input__label--kohana" for="input-29">
                        <i class="icon-user6 icon icon--kohana"></i>
						<span class="input__label-content input__label-content--kohana">Your Name</span>
					</label>
				</span>
                        <span class="input input--kohana">
					<input class="input__field input__field--kohana" type="text" id="input-30" name="input-30" />
					<label class="input__label input__label--kohana" for="input-30">
						<i class="icon-dollar icon icon--kohana"></i>
						<span class="input__label-content input__label-content--kohana">Email Address</span>
					</label>
				</span>
                        <span class="input input--kohana last">
					<input class="input__field input__field--kohana" type="text" id="input-31" name="input-31" />
					<label class="input__label input__label--kohana" for="input-31">
						<i class="icon-phone5 icon icon--kohana"></i>
						<span class="input__label-content input__label-content--kohana">Phone Number</span>
					</label>
				</span>

                        <span class="input input--kohana">
					<input class="input__field input__field--kohana" type="text" id="datepicker"  placeholder="Appointment Date" onClick="" name="datepicker" />
				</span>

                        <span class="input input--kohana message">
                	<input class="input__field input__field--kohana" type="text" id="textarea" name="textarea" >
					<label class="input__label input__label--kohana" for="textarea">
						<i class="icon-new-message icon icon--kohana"></i>
						<span class="input__label-content input__label-content--kohana">Message</span>
                    </label>
                </span>

                        <input name="submit" type="submit" value="send" onClick="validateAppointment();">
                    </form>


Вот мои настройки:

<?php $form = ActiveForm::begin(['method' => 'POST', 'id' => 'appointment_form']); ?>

                        <span class="input input--kohana"><?= $form->field($model, 'name1', ['inputOptions' => ['class' => 'input__field input__field--kohana', 'id' => 'input-29']])->label([
                                'class' => 'input__label input__label--kohana', 'for' => 'input-29', 'template' => '<i class="icon-user6 icon icon--kohana"></i><span class="input__label-content input__label-content--kohana">Your Name</span>{label}'
                            ]); ?></span>

                        <span class="input input--kohana"><?= $form->field($model, 'email1', ['inputOptions' => ['class' => 'input__field input__field--kohana', 'id' => 'input-30']])->label([
                                'class' => 'input__label input__label--kohana', 'for' => 'input-30', 'template' => '<i class="icon-dollar icon icon--kohana"></i><span class="input__label-content input__label-content--kohana">Email Address</span>{label}'
                            ]); ?></span>

                        <span class="input input--kohana last"><?= $form->field($model, 'phone', ['inputOptions' => ['class' => 'input__field input__field--kohana', 'id' => 'input-31']])->label([
                                'class' => 'input__label input__label--kohana', 'for' => 'input-31', 'template' => '<i class="icon-phone5 icon icon--kohana"></i><span class="input__label-content input__label-content--kohana">Phone Number</span>{label}'
                        ]); ?></span>

                        <span class="input input--kohana"><?= $form->field($model, 'datepicker', ['inputOptions' => ['class' => 'input__field input__field--kohana', 'id' => 'datepicker']]); ?></span>

                        <span class="input input--kohana message"><?= $form->field($model, 'body1', ['inputOptions' => ['class' => 'input__field input__field--kohana', 'id' => 'textarea']])->label([
                                'class' => 'input__label input__label--kohana', 'for' => 'textarea', 'template' => '<i class="icon-new-message icon icon--kohana"></i><span class="input__label-content input__label-content--kohana">Message</span>{label}'
                            ]) ?></span>

                        <div class="form-group">
                            <input name="submit" type="submit" value="submit">
                        </div>

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


Вот контроллер:
/**
     * Displays homepage.
     *
     * @return string
     */
    public function actionIndex()
    {
        /* Создаем экземпляр класса */
        $model = new AppointmentForm();
        /* получаем данные из формы и запускаем функцию отправки contact, если все хорошо, выводим сообщение об удачной отправке сообщения на почту */
        if ($model->load(Yii::$app->request->post()) && $model->appointment(Yii::$app->params['adminEmail'])) {
            Yii::$app->session->setFlash('contactFormSubmitted');
            return $this->refresh();
            /* иначе выводим форму обратной связи */
        }  else {
        return $this->render('index');
        }
    }


Модель:

/**
     * Sends an email to the specified email address using the information collected by this model.
     * @param string $email1 the target email address
     * @return bool whether the model passes validation
     */
    public function appointment($email1)
    {
        $content = "<p>Email: " . $this->email1 . "</p>";
        $content .= "<p>Name: " . $this->name1 . "</p>";
        $content .= "<p>Phone: " . $this->phone . "</p>";
        $content .= "<p>Datepicker: " . $this->datepicker . "</p>";
        $content .= "<p>Body: " . $this->body1 . "</p>";
        if ($this->validate()) {
            Yii::$app->mailer->compose("@app/mail/layouts/html", ["content" => $content])
                //->setTo($email)
                ->setTo('swallowsveta97@yandex.ru')
                ->setFrom([\Yii::$app->params['supportEmail'] => $this->name1])
                //->setFrom([$this->email => $this->name])
                //->setFrom('swallowsveta97@yandex.ru')
                //->setFrom([\Yii::$app->params['supportEmail'] => $this->name])
                ->setPhone($this->phone)
                ->setDatepicker($this->datepicker)
                ->setTextBody1($this->body1)
                ->send();

            return true;
        }
        return false;
    }


А вот ошибка, с которой я столкнулась:

1. in C:\Users\acer\OSPanel\domains\medicalyii2\vendor\yiisoft\yii2\helpers\BaseHtml.php at line                  * See [[getAttributeName()]] for explanation of attribute expression.
     *
     * @param Model $model the model object
     * @param string $attribute the attribute name or expression
     * @return string the generated input name
     * @throws InvalidArgumentException if the attribute name contains non-word characters.
     */
    public static function getInputName($model, $attribute)
    {
        $formName = $model->formName();
        if (!preg_match(static::$attributeRegex, $attribute, $matches)) {
            throw new InvalidArgumentException('Attribute name must contain word characters only.');
        }
        $prefix = $matches[1];
        $attribute = $matches[2];
        $suffix = $matches[3];
        if ($formName === '' && $prefix === '') {
            return $attribute . $suffix;
        } elseif ($formName !== '') {
                
2. yii\base\ErrorHandler::handleFatalError()
  • Вопрос задан
  • 481 просмотр
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Немного сократил Ваш код для генерации формы.
<?php
   $form = ActiveForm::begin([
       'id' => 'appointment_form',
       'fieldConfig' => [
           'options' => [
               'tag' => 'span',
               'class' => 'input input--kohana'
           ],
           'template' => '{input}{label}{error}',
           'inputOptions' => ['class' => 'input__field input__field--kohana'],
           'labelOptions' => [
               'class' => 'input__label input__label--kohana',
           ]
       ]
   ]);
?>
<?= $form->field($model, 'name')->textInput()->label("<i class=\"icon-phone5 icon icon--kohana\"></i><span class=\"input__label-content input__label-content--kohana\">" . $model->getAttributeLabel('name') . "</span>") ?>
<!-- ОСТАЛЬНЫЕ ПОЛЯ ФОРМЫ  -->
<?= $form->field($model, 'body')->textInput()->label() ?>
<?= Html::submitButton('Submit'); ?>
<?php
  ActiveForm::end();
?>

Думаю, что так будет лучше. Некоторые атрибуты для полей добавьте сами, если в этом есть необходимость.
Вот только с шаблоном для label не совсем уверен, возможно, что и его можно не дублировать, но пока не придумал как.

p.s. Перед этой строкой не надо формировать переменную и потом передавать её в шаблон письма.
Достаточно просто передать модель.
// Удалить!!!
   /*   $content = "<p>Email: " . $this->email1 . "</p>";
        $content .= "<p>Name: " . $this->name1 . "</p>";
        $content .= "<p>Phone: " . $this->phone . "</p>";
        $content .= "<p>Datepicker: " . $this->datepicker . "</p>";
        $content .= "<p>Body: " . $this->body1 . "</p>";*/
        if ($this->validate()) {
            Yii::$app->mailer->compose("@app/mail/layouts/html", ["content" => $this])

И уже в самом шаблоне обработать и сформировать html.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы