ModelForm is a PHP Form Abstraction for Laravel based on Django Forms and Formset, but completely integrated with the Laravel FormBuilder.
169
20
5
Package Data
Maintainer Username: andersondanilo
Package Create Date: 2014-12-30
Package Last Update: 2016-01-23
Language: PHP
License: MIT
Last Refreshed: 2024-04-19 15:08:13
Package Statistics
Total Downloads: 169
Monthly Downloads: 0
Daily Downloads: 0
Total Stars: 20
Total Watchers: 5
Total Forks: 0
Total Open Issues: 0

Travis Code Climate Test Coverage Latest Stable Version Latest Unstable Version License

What is

ModelForm is a PHP Form Abstraction for Laravel based on Django Forms and Formset, but completely integrated with the Laravel FormBuilder.

Instalation

To get the latest version of ModelForm simply require it in your composer.json file

php composer.phar require "andersondanilo/modelform:dev-master"

Examples of usage

Simple example: Without model

// SimpleForm.php
use ModelForm\Form;
use ModelForm\Fields\CharField;
use ModelForm\Fields\IntegerField;

class SimpleForm extends Form
{
    public function makeFields()
    {
        $this->name = new CharField(['label' => 'Name']);
        $this->age = new IntegerField(['label' => 'Age']);
    }
}

Instancializing Form

$simpleForm = new SimpleForm(['data' => Input::old() ?: Input::all()]);

Rendering model in view

    {{ $simpleForm->name->label() }}:
    {{ $simpleForm->name->text(['class' => 'form-control']) }}

Acessing values after

    $name = $simpleForm->name->value;

With Model and Validator

use ModelForm\Form;
use ModelForm\Fields\CharField;
use ModelForm\Fields\IntegerField;

class SimpleForm extends Form
{
    public function makeFields()
    {
        $this->name = new CharField(['label' => 'Name']);
        $this->age = new IntegerField(['label' => 'Age']);
    }
    
    public function makeModel()
    {
        return new MyModel();
    }
    
    public function makeValidator($data)
    {
        return Validator::make($data, [
            'name' => 'required'
        ]);
    }
}

You can instancialize without model and then the model is created by form, or start with a already existing model.

$model10 = MyModel::find(10);
$form = new SimpleForm(['model' => $model10, 'data' => Input::old() ?: Input::all()]);

Validating

if(!$simpleForm->isValid()) {
    return Redirect::back()->withErrors($simpleForm->errors())->withInput();
}

Saving your model

$simpleForm->save();

Formsets

use ModelForm\FormSet;

class SimpleFormSet extends FormSet
{
    public function makeForm($model=null)
    {
        return new SimpleForm(['model'=>$model]);
    }
}

Create the empty formset instance:

$simpleFormSet = new SimpleFormSet(['data' => Input::old() ?: Input::all());

Or create a formset filled with a model relation:

$addressFormSet = new AddressFormSet(['relation'=>$customer->addresses(), 'data' => Input::old() ?: Input::all());

The validation and saving of formset is the symmetric with form.

if(!$addressFormSet->isValid()) {
    return Redirect::back()->withErrors($addressFormSet->errors())->withInput();
}
$addressFormSet->save();