PHP code example of wisam-alhennawi / lara-forms-builder
1. Go to this page and download the library: Download wisam-alhennawi/lara-forms-builder library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
wisam-alhennawi / lara-forms-builder example snippets
return [
'default_group_wrapper_class' => 'lfb-group-wrapper',
'default_field_wrapper_class' => 'lfb-field-wrapper',
'card_field_error_wrapper_classes' => 'shadow mb-4 overflow-hidden rounded-md col-span-2 sm:col-span-2',
'primary_button_classes' => 'lfb-primary-button',
'secondary_button_classes' => 'lfb-secondary-button',
'footer_buttons_wrapper_classes' => 'lfb-buttons-wrapper',
'previous_button_classes' => 'lfb-secondary-button',
'next_button_classes' => 'lfb-primary-button',
];
public array $developersOptions = []; // For 'checkbox-group' options
public array $userIdOptions = []; // For 'user_id' options
public function beforeFormProperties(): void
{
$this->developersOptions = User::all(['id as value', 'name as label'])->toArray();
}
public function afterFormProperties(): void
{
$this->formProperties['developers'] = $this->model->developers->pluck('id');
}
protected function fields(): array
{
return [
[
'fields' => [
'title' => [
'type' => 'input',
'label' => __('models/projects.fields.title'),
'readOnly' => true
],
'status' => [
'type' => 'select',
'label' => __('models/projects.fields.status'),
'styled' => true,
'searchable' => true,
'options' => [
[
'value' => '1',
'label' => __('Pending')
],
[
'value' => '2',
'label' => __('Active')
],
[
'value' => '3',
'label' => __('Completed')
]
]
],
'type' => [
'type' => 'radio',
'label' => __('models/projects.fields.type'),
'options' => [
'1' => __('Public'),
'2' => __('Private')
]
],
'starting_date' => [
'type' => 'date-picker',
'label' => __('models/projects.fields.starting_date'),
],
'user_id' => [
'type' => 'search-picker',
'label' => __('models/projects.fields.user_id'),
'searchPickerResultsProperty' => 'userIdOptions',
'placeholder' => __('Search for Team Leader'),
],
'is_accepted' => [
'type' => 'checkbox',
'label' => __('models/projects.fields.is_accepted'),
],
'description' => [
'type' => 'textarea',
'label' => __('models/projects.fields.description'),
'field_wrapper_class' => 'col-span-2',
],
'developers' => [
'type' => 'checkbox-group',
'label' => __('models/projects.fields.developers'),
'options' => $this->developersOptions,
],
'document' => [
'type' => 'file',
'label' => __('models/projects.fields.document'),
],
]
]
];
}
public function saveDevelopers($validated_date) {
$this->model->developers()->sync($validated_date);
}
public function getUserIdOptions($searchPickerTerm)
{
return User::select('id', 'name')
->where('name', 'like', '%' . $searchPickerTerm . '%')
->get()
->each(function($row){
$row->key = $row->id;
$row->value = $row->name;
$row->labels = collect(['White', 'Green', 'Blue', 'Red', 'Yellow'])->random(rand(0, 3))->toArray();
})
->toArray();
}
// will return ($user_id_search_picker_selected_value) which used in blade to display the selected option
public function getUserIdSearchPickerSelectedValueProperty()
{
if ($this->formProperties['user_id']) {
return User::find($this->formProperties['user_id'])->name;
}
return null;
}
public function saveAttachment($attachmentValue) {
$attachmentValue->storeAs('attachments', $attachmentValue->getClientOriginalName());
}
[
'key' => '',
'value' => '',
'labels' => [] // optional
]
use WisamAlhennawi\LaraFormsBuilder\LaraFormComponent;
use WisamAlhennawi\LaraFormsBuilder\Traits\HasTabs;
class CustomerForm extends LaraFormComponent
{
use HasTabs;
public function mount(Customer $customer)
{
$this->mountForm($customer, [
'activeTab' => 'address-data',
'hasTabs' => true,
'isMultiStep' => true, // Optional if you want to use the multi-step form feature
]);
}
protected function fields(): array
{
return [
[
'key' => 'address-data',
'title' => __('Address Data'),
'content' => [
'group_info' => [
'group_wrapper_class' => 'grid grid-cols-4 gap-6',
'default_group_wrapper_class' => false
],
'fields' => [
// Fields for the 'Address Data' tab
// Example:
'company' => [
'type' => 'input',
'label' => __('models/customers.fields.company'),
'field_wrapper_class' => 'col-span-4',
],
// ... other fields
],
],
],
[
'key' => 'contact-data',
'title' => __('Contact Data'),
'content' => [
'group_info' => [
'group_wrapper_class' => 'grid grid-cols-6 gap-6',
'default_group_wrapper_class' => false
],
'fields' => [
// Fields for the 'Contact Data' tab
// Example:
'phone' => [
'type' => 'input',
'label' => __('customers.fields.phone'),
'field_wrapper_class' => 'col-span-2',
],
// ... other fields
],
],
],
// .. other tabs
];
}
// ... other component properties and methods
}
trans('A new entry has been created successfully.')
trans('Changes were saved successfully.')
'A new '.$modelName.' has been created successfully.'
'The '.$modelName.' has been updated successfully.'
'A new user has been created successfully.'
'The user has been updated successfully.'
protected function shouldDisplayIndicatorBasedOnCustomCheck($key): bool
{
if ($key == 'email' && $this->formProperties['type'] == 'email') {
return true;
}
return false;
}
bash
// V1
$this->email
// V2
$this->formProperties['email']
// V1
$this->rules['email']
// V2
$this->rules['formProperties.email']
bash
php artisan make:lara-forms-builder-setup
bash
php artisan vendor:publish --tag="lara-forms-builder-config"
js
export default {
content: [
'./config/lara-forms-builder.php',
],
theme: {
extend: {
colors: {
'primary': '', // #7c8e63
'secondary': '', // #aebf85
'danger': '' // #DC3545
},
},
},
};
bash
php artisan vendor:publish --tag="lara-forms-builder-assets"
bash
php artisan vendor:publish --tag="lara-forms-builder-translations"
bash
php artisan vendor:publish --tag="lara-forms-builder-views"