PHPackages                             vis/apply\_form\_l5 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. vis/apply\_form\_l5

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

vis/apply\_form\_l5
===================

Apply Forms handler package for L5

1.0.9(8y ago)144proprietaryPHP

Since Aug 31Pushed 8y ago1 watchersCompare

[ Source](https://github.com/KHlushchenko/apply_form_l5)[ Packagist](https://packagist.org/packages/vis/apply_form_l5)[ RSS](/packages/vis-apply-form-l5/feed)WikiDiscussions master Synced 2w ago

READMEChangelogDependencies (1)Versions (11)Used By (0)

Apply Form
==========

[](#apply-form)

Пакет Laravel 5 предназначенный для работы с формами. Требует и автоматически устанавливает пакет [https://github.com/arturishe21/mail\_templates\_l5](https://github.com/arturishe21/mail_templates_l5) для работы с отправкой писем. Поддерживает интеграцию с Google Invisible reCaptcha.

Разделы

1. [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
2. [VIS-CMS](#VIS-CMS)
3. [Настройка](#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0)
4. [Пример использования](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
5. [Описание классов](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2)

Установка
---------

[](#установка)

Выполняем

```
    composer require "vis/apply_form_l5":"1.*"
```

Добавляем ApplyFormServiceProvider в массив ServiceProviders в config/app.php

```
   Vis\ApplyForm\ApplyFormServiceProvider::class,
```

Выполняем миграцию таблиц

```
   php artisan migrate --path=vendor/vis/apply_form_l5/src/Migrations
```

Публикуем js, nodes

```
    php artisan vendor:publish --provider="Vis\ApplyForm\ApplyFormServiceProvider" --force
```

Добавляем в layouts.default(или на конкретную вьюху, если заявка только на одной странице) перед закрывающим тегом body

```
@include('apply_form::apply_form')
```

VIS-CMS
-------

[](#vis-cms)

В \\config\\builder\\admin.php дописываем массив

```
    array(
        'title' => 'Заявки',
        'icon'  => 'list',
        'check' => function() {
            return Sentinel::hasAccess('admin.apply_form.view');
        },
        'submenu' => array(
            array(
                'title' => "Отправленные заявки",
                'check' => function() {
                    return Sentinel::hasAccess('admin.apply_form.view');
                },
                'submenu' => array(
                    //определение tb-definitions для форм заявок
                )
            ),
            array(
                'title' => "Сообщения ответы",
                'link'  => '/vis_apply_form_setting_messages',
                'check' => function() {
                    return Sentinel::hasAccess('admin.vis_apply_form_setting_messages.view');
                }
            ),
            array(
                'title' => "E-mail адреса",
                'link'  => '/vis_apply_form_setting_emails',
                'check' => function() {
                    return Sentinel::hasAccess('admin.vis_apply_form_setting_emails.view');
                }
            ),
        )
    ),
```

Добавляем права доступа в config/builder/tb-definitions/groups.php и добавляем их к группам.

```
    'Заявки' => array(
        'admin.apply_form.view'   => 'Просмотр',
        'admin.apply_form.create' => 'Создание',
        'admin.apply_form.update' => 'Редактирование',
        'admin.apply_form.delete' => 'Удаление',
    ),
    'Заявки - Сообщения' => array(
        'admin.vis_apply_form_setting_messages.view'   => 'Просмотр',
        'admin.vis_apply_form_setting_messages.create' => 'Создание',
        'admin.vis_apply_form_setting_messages.update' => 'Редактирование',
        'admin.vis_apply_form_setting_messages.delete' => 'Удаление',
    ),
    'Заявки - Имейлы' => array(
        'admin.vis_apply_form_setting_emails.view'   => 'Просмотр',
        'admin.vis_apply_form_setting_emails.create' => 'Создание',
        'admin.vis_apply_form_setting_emails.update' => 'Редактирование',
        'admin.vis_apply_form_setting_emails.delete' => 'Удаление',
    ),
```

Настройка
---------

[](#настройка)

В файле config/apply\_form/apply\_form.php

Включаем капчу и добавляем публичный и скрытый ключи

```
    /**
     * Defines usage of Google Invisible reCaptcha
     * @link https://www.google.com/recaptcha/admin
     */
    'grecaptcha' => [
        'enabled'    => true,
        'site_key'   => '',
        'secret_key' => ''
    ],
```

В файле public/js/apply\_form\_rules.js переопределяем методы и указываем в них свои действия(например, вызов попапа с кастомным сообщением) по выполнению ajax запроса

```
ApplyForm.successCallback = function (message) {
};

ApplyForm.failCallback = function (message) {
};
```

В этом же файле можно дописать дополнительные правила проверки полей, например добавить маску для телефонов.
Для этого в класс ApplyFormRules нужно добавить свой метод, например:

```
        initPhoneMask: function () {
            $('input[name=phone]').mask('+38 (000) 000-00-00', {clearIfNotMatch: true});
        },
```

И зарегистрировать его инициализацую в методе ApplyFormRules.init()

```
        init: function () {
            ApplyFormRules.initPhoneMask();
        },
```

Пример использования
--------------------

[](#пример-использования)

1. Определяем класс, который рассширяет класс Vis\\ApplyForm\\Models\\AbstractApplyForm

```
namespace App\Models\ApplyForm;

use Vis\ApplyForm\Models\AbstractApplyForm;

class ApplyFormAuthorizedMessage extends AbstractApplyForm
{
	protected $table = "apply_form_authorized_messages";

	protected $validationRules = [
        "personal_data" => 'required|integer|in:1',
        'name'          => 'alpha|min:4|max:64',
        'answer_type'   => 'required|in:phone,email',
        'phone'         => 'nullable|required_if:answer_type,phone|size:19|regex:/\+38 \((\d{3})\) \d{3}-\d{2}-\d{2}/',
        'email'         => 'nullable|required_if:answer_type,email|email|min:4|max:64',
        'message'       => 'required|min:10|max:2000',
        'file'       => 'required|max:3072|mimes:pdf,doc,docx'
    ];

    protected $fileFieldName = 'file';
    protected $fileStorageFolder = 'storage/apply_forms/files/authorized_message/';

    protected $mailTemplate    = 'shablon-zajavka-avtorizirovannoe-obrashenie';
    protected $mailAddressSlug = 'email-zayavka-avtorizirovannoe-obrashenie';
    protected $messageSlug     = 'soobshchenie-zayavka-avtorizirovannoe-obrashenie';
    protected $messageFailSlug = 'soobshchenie-fail-zayavka-avtorizirovannoe-obrashenie';

    protected function prepareInputData(array $inputData): array
    {
        $this->inputCleaner()->setArray($inputData);

        $preparedData = [
            'name'        => $this->inputCleaner()->getCleanString('name'),
            'answer_type' => $this->inputCleaner()->getString('answer_type'),
            'phone'       => $this->inputCleaner()->getString('phone'),
            'email'       => $this->inputCleaner()->getCleanString('email'),
            'message'     => $this->inputCleaner()->getCleanString('message'),
            'file'        => $this->inputCleaner()->getString('file'),
        ];

        return $preparedData;
    }

    protected function prepareMailData(array $preparedData): array
    {
        $preparedData['answer_type'] = $preparedData['answer_type'] == 'email' ? 'Email' : 'Телефон';
        $preparedData['file_url']    =  asset($preparedData['file']);

        return $preparedData;
    }

    protected function customCallback(array $attributes)
    {
        //print_arr($attributes);
    }
}
```

2. Добавляем его в массив форм apply\_forms в config/apply\_form/apply\_form.php

```
    'apply_forms' => [
        'authorized_messages' => App\Models\ApplyForm\ApplyFormAuthorizedMessage::class,
    ],
```

3. Создаем форму в шаблонах с названием 'название\_формы\_form', например такую:

```

            {{__t('Отримати відповідь на e-mail')}}
            {{__t('Отримати відповідь телефоном')}}

        {{__t("обов`язкове поле")}}

        {{__t("обов`язкове поле")}}

        {{__t("обов`язкове поле")}}

        {{__t("обов`язкове поле")}}

                        {{__t('файл')}} (DOC, DOCX, PDF)
                        {{__t('файл')}} (DOC, DOCX, PDF)
                        {{__t('Видалити')}}
                        {{__t('Завантажити')}}

                    {{__t('Дозволено приєднувати тільки')}}: DOC, DOCX, PDF (3 MB {{__t('максимум')}})

            {{__t("Я згоден на збір та обробку моїх персональних даних, відповідно до")}} {{__t('Закону України “Про захист персональних даних”')}}

        {{__t('Відправити')}}

```

4. Дописываем в файл public/js/apply\_form\_rules.js правила jquery validation
    Правила определяются как 'название\_формы\_rules' и 'название\_формы\_messages'

```
ApplyForm.authorized_message_rules = {
    'personal_data' : { required: true },
    'answer_type'   : { required: true, responseMethod: true  },
    'name'          : { required: true, rangelength: [4,64]},
    'phone'         : { rangelength: [19, 19]},
    'email'         : { rangelength: [4, 64], email: true },
    'message'       : { required: true, rangelength: [10, 2000]},
};

ApplyForm.authorized_message_messages = {
    'personal_data' : { required: ''},
    'answer_type'   : { required: '', responseMethod: '',},
    'name'          : { required: '', rangelength: '' },
    'phone'         : { rangelength: '' },
    'email'         : { rangelength: '', email: '' },
    'message'       : { required: '', rangelength: ''},
};

ApplyForm.successCallback = function (message) {
    Popup.showWithMessage('popup-success', message);
};

ApplyForm.failCallback = function (message) {
    Popup.showWithMessage('popup-error', message);
};

//add additional methods for validating inputs
var ApplyFormRules =
    {
        initPhoneMask: function () {
            $('input[name=phone]').mask('+38 (000) 000-00-00', {clearIfNotMatch: true});
        },

        init: function () {
            ApplyFormRules.initPhoneMask();
        },
    }
```

Описание классов
----------------

[](#описание-классов)

1. Класс расширяемый классом Vis\\ApplyForm\\Models\\AbstractApplyForm

```
namespace App\Models\ApplyForm;

use Vis\ApplyForm\Models\AbstractApplyForm;

class ApplyFormAuthorizedMessage extends AbstractApplyForm
{

}
```

**Описание обязательных свойств:**

Имя используемой таблицы
Значение: строка'

```
	protected $table = '';
```

**Описание дополнительных свойств:**

Правила валидации
Значение: массив

```
	protected $validationRules = [
    ];
```

Название поля с файлом
Используется, если форма передает файл
Значение: строка

```
    protected $fileFieldName = '';
```

Путь к папке, в которой будет хранится файл относительно публичной директории
Используется, если форма передает файл
Значение: строка

```
    protected $fileStorageFolder = '';
```

Путь к папке, в которой будет хранится файл относительно публичной директории
Используется, если форма передает файл
Значение: строка

```
    protected $fileStorageFolder = '';
```

Название шаблона письма
Используется, если после сохранения нужно отправить письмо на почту
Значение: строка с slug шаблона класса Vis\\MailTemplates\\MailT

```
    protected $mailTemplate    = '';
```

Список имейлов для отправки письма
Используется, если после сохранения нужно отправить письмо на почту
Значение: строка с slug записи класса Vis\\ApplyForm\\Models\\ApplyFormSettingEmail

```
    protected $mailAddressSlug = '';
```

Возвращаемое сообщение после удачного сохранения заявки
Используется, если после сохранения нужно отправить письмо на почту
Значение: строка с slug записи класса Vis\\ApplyForm\\Models\\ApplyFormSettingMessage

```
    protected $messageSlug = '';
```

Возвращаемое сообщение после неудачного сохранения заявки
Используется, если после сохранения нужно отправить письмо на почту
Значение: строка с slug записи класса Vis\\ApplyForm\\Models\\ApplyFormSettingMessage

```
    protected $messageFailSlug = '';
```

**Описание обязательных методов:**

Метод подготовки исходных данных
Рекомендуется использовать класс-помошник Vis\\ApplyForm\\Helpers\\InputCleaner для очистки данных Значение: массив
Возвращаемое значение: массив

```
    protected function prepareInputData(array $inputData): array
```

**Описание дополнительных свойств:**

Метод преобразования подготовленных данных в данные для отправки на почту
Значение: массив
Возвращаемое значение: массив

```
    protected function prepareMailData(array $preparedData): array
```

Метод вызова дополнительного функционала вызываемый после сохранения заявки, например передача данных в API
Значение: массив

```
    protected function customCallback($attributes)
```

2. Класс Vis\\ApplyForm\\Helpers\\InputCleaner

**Описание методов:**

Метод установки массива исходных данных
Значение: массив

```
    public function setArray(array $array)
```

Метод получения массива данных
Значение: массив

```
    public function getArray(): array
```

Метод получения значения по названию поля из массива данных
Значение: строка
Возвращаемое значение: значение из массива или null

```
    public function get(string $field)
```

Метод получения целочисленного значения по названию поля из массива данных
Значение: строка
Возвращаемое значение: целое число

```
    public function getInt(string $field): int
```

Метод получения дробногочисленного значения по названию поля из массива данных
Значение: строка
Возвращаемое значение: дробное число

```
    public function getFloat(string $field): float
```

Метод получения строчного значения по названию поля из массива данных
Значение: строка
Возвращаемое значение: дробное число

```
    public function getString(string $field): string
```

Метод получения очищенного строчного значения по названию поля из массива данных
Значение: строка
Возвращаемое значение: дробное число

```
    public function getCleanString(string $field): string
```

Метод получения json строки по названию поля из массива данных
Значение: строка
Возвращаемое значение: строка json

```
    public function getJson(string $field): string
```

3. Класс Vis\\ApplyForm\\Helpers\\TableHandler Класс хендлер для tb-definitions.

Метод превращения строки с ссылкой на файл в ссылку на файл

```
    protected function handleFile($formField, array &$row)
```

Метод превращения строки типа foreign в ссылку на foreign объект
Примечание: в дефинишен поля foreign надо дописать параметр 'foreign\_model', а в указанной модели определить метод getAdminUrl

```
    protected function handleForeign($formField, array &$row)
```

###  Health Score

29

—

LowBetter than 57% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~16 days

Recently: every ~26 days

Total

10

Last Release

3079d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4ccb895209ea7108142712514fcb896c4bd2d73e196343b566d15585a4d66136?d=identicon)[KGluschenko](/maintainers/KGluschenko)

---

Top Contributors

[![KHlushchenko](https://avatars.githubusercontent.com/u/6852568?v=4)](https://github.com/KHlushchenko "KHlushchenko (23 commits)")

### Embed Badge

![Health badge](/badges/vis-apply-form-l5/health.svg)

```
[![Health](https://phpackages.com/badges/vis-apply-form-l5/health.svg)](https://phpackages.com/packages/vis-apply-form-l5)
```

###  Alternatives

[thamtech/yii2-uuid

Yii 2 UUID Helper

35359.7k7](/packages/thamtech-yii2-uuid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
