andersondanilo/modelform

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

1.0.1 2015-01-31 00:31 UTC

This package is auto-updated.

Last update: 2024-10-27 04:20:08 UTC


README

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();