• Stars
    star
    535
  • Rank 82,940 (Top 2 %)
  • Language
    PHP
  • License
    MIT License
  • Created about 6 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Modern form builder for Laravel

Aire

Aire is a modern Laravel form builder (demo) with a focus on the same expressive and beautiful code you expect from the Laravel ecosystem.

Basic Usage

The most common usage is via the Aire facade in your blade templates. All method calls are fluent, allowing for easy configuration of your form components:

{{ Aire::open()
  ->route('users.update')
  ->bind($user) }}

{{ Aire::input('given_name', 'First/Given Name')
    ->id('given_name') }}
    
{{ Aire::input('family_name', 'Last/Family Name')
    ->id('family_name')
    ->autoComplete('off') }}
  
{{ Aire::email('email', 'Email Address')
    ->helpText('Please use your company email address.') }}
  
{{ Aire::submit('Update User') }}
  
{{ Aire::close() }}

Blade Components

As of Aire 2.4.0, you can also use all Aire elements as Blade Components. The above form is identical to:

<x-aire::form route="users.update" :bind="$user">

    <x-aire::input 
        name="given_name" 
        label="First/Given Name" 
        id="given_name" 
    />
    <x-aire::input 
        name="family_name" 
        label="Last/Family Name" 
        id="family_name" 
        auto-complete="off" 
    />
    <x-aire::email 
        name="email" 
        label="Email Address" 
        help-text="Please use your company email address." 
    />
    
    <x-aire::submit label="Update User" />
    
</x-aire::form>

Installation

Install via composer with:

composer require glhd/aire

Customization

Aire comes with classes that should work with the default Tailwind class names out of the box (.bg-blue-600 etc). If you need to change the default class names for any given element, there are two different ways to go about it.

The first is to publish the aire.php config file via php artisan vendor:publish --tag=aire-config and update the default_classes config for the element you'd like to change:

return [
  'default_classes' => [
    'input' => 'text-gray-900 bg-white border rounded-sm',
  ],
];

The second option is to publish custom views via php artisan vendor:publish --tag=aire-views which gives you total control over component rendering. There's a view file for each component type (input.blade.php etc) as well as for component grouping. This gives you the most flexibility, but means that you have the maintain your views as Aire releases add new features or change component rendering.

Configuration

When you publish the aire.php config file via php artisan vendor:publish --tag=aire-config, there are a handful of other configuration options. The config file is fully documented, so go check it out!

Data Binding

Aire automatically binds old input to your form so that values are preserved if a validation error occurs. You can also bind data with the bind() method.

// Bind Eloquent models
Aire::bind(User::find(1));

// Bind an array
Aire::bind(['given_name' => 'Chris']);

// Bind any object
Aire::bind((object) ['given_name' => 'Chris']);

Binding Precedence

Binding is applied in the following order:

  1. Values set with value() are applied no matter what
  2. Old input is applied if available
  3. Bound data is applied last

Method Spoofing & Inference

Aire will automatically add the Laravel _method field for forms that are not GET or POST. It will also automatically infer the intended method from the route if possible.

// In routes
Route::delete('/photos/{photo}', 'PhotosController@destroy')
	->name('photos.destroy');

// In your view
{{ Aire::open()->route('photos.destroy', $photo) }}
{{ Aire::close() }}

Will generate the resulting HTML:

<form action="/photos/1" method="POST">
<input type="hidden" name="_method" value="DELETE" />
</form>

Automatic CSRF Field

Aire will automatically inject a CSRF token if one exists and the form is not a GET form. Simply enable the session and a hidden _token field will be injected for you.

Server-Side Validation

If you run validations on the server, Aire will pick up any errors and automatically apply error classes and show error messages within the associated input's group.

You can also include an error summary, which provides an easy way to show your users an error at the top of the page if validation failed.

// Print "There are X errors on this page that you must fix before continuing."
{{ Aire::summary() }}

// Also include an itemized list of errors
{{ Aire::summary()->verbose() }}

Client-Side Validation

Javascript validation in Aire is in its early stages. Browser testing is limited, and the Javascript code hasn't had an performance optimizations applied. That said, Aire supports automatic client-side validation—simply pass an array of rules or a FormRequest object and Aire will automatically apply most rules on the client side (thanks to validatorjs!).

Laravel Version Support

Aire should run on Laravel 5.8.28 and higher, and PHP 7.1 and higher. Our policy is to test the last two major releases of PHP and Laravel, so support below that is not guaranteed.

Translations

Aire comes with support for a handful of languages (feel free to submit a PR!). If you would like to add your own translations, you can do so by publishing them with:

php artisan vendor:publish --tag=aire-translations

Under Consideration / Feature Ideas

There are a few things that are still either in-the-works or being considered for a later release. These include:

More Repositories

1

laravel-dumper

Upgrade dd() with Laravel-specific improvements
PHP
387
star
2

gretel

Laravel breadcrumbs right out of a fairy tale
PHP
221
star
3

alpine-wizard

Multi-step wizard helpers for Alpine.js
JavaScript
145
star
4

conveyor-belt

All the underlying mechanics necessary to write artisan commands that process lots of data efficiently
PHP
133
star
5

tailwindcss-plugins

Plugins & helpers for tailwindcss
JavaScript
85
star
6

bits

PHP
73
star
7

dawn

Experimental next-gen browser testing for Laravel
PHP
72
star
8

laravel-addressing

Laravel package providing addressing functionality
PHP
62
star
9

linen

Lightweight spreadsheets for Laravel
PHP
50
star
10

special

PHP
17
star
11

hooks

PHP
14
star
12

tinker-gui

Laravel Tinker GUI
TypeScript
12
star
13

linearavel

PHP
9
star
14

laravel-timezone-mapper

Map latitude/longitude to a timezone without making external API calls
PHP
8
star
15

wp-bootstrap-widgets

Bootstrap Components as WordPress Widgets
PHP
6
star
16

aire-bootstrap

Bootstrap theme for Aire
PHP
6
star
17

laravel-dusk-browserstack

Easily run Laravel Dusk tests on BrowserStack
PHP
6
star
18

ansipants

PHP
6
star
19

laralint

Framework for linting Laravel projects
PHP
6
star
20

laravel-package-template

Template for Laravel packages
PHP
4
star
21

laravel-prismoquent

Prismoquent lets you access Prismic.io using the same methods you're used to in Eloquent.
PHP
2
star
22

medusa

Headless content management
JavaScript
2
star
23

ansible-interactive

Interactive CLI for ansible plays
JavaScript
2
star
24

fs-of-holding

A filesystem that has every file in it
PHP
1
star
25

aire-livewire

1
star
26

omniponent

JavaScript
1
star
27

suspend

PHP
1
star
28

aire-docs

Blade
1
star
29

vbulletin-bbcode-parser

Parser package for vBulletin bbCode
PHP
1
star
30

verbs-github-webhooks

A collection of Verbs events to use with GitHub webhooks
PHP
1
star
31

accounts-payable

Help collect tax documents and pay independent contractors
PHP
1
star