, (*1)
What is
ModelForm is a PHP Form Abstraction for Laravel based on Django Forms and Formset, but completely integrated with the Laravel FormBuilder., (*2)
Instalation
To get the latest version of ModelForm simply require it in your composer.json file, (*3)
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, (*4)
$simpleForm = new SimpleForm(['data' => Input::old() ?: Input::all()]);
Rendering model in view, (*5)
{{ $simpleForm->name->label() }}:
{{ $simpleForm->name->text(['class' => 'form-control']) }}
Acessing values after, (*6)
$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., (*7)
$model10 = MyModel::find(10);
$form = new SimpleForm(['model' => $model10, 'data' => Input::old() ?: Input::all()]);
Validating, (*8)
if(!$simpleForm->isValid()) {
return Redirect::back()->withErrors($simpleForm->errors())->withInput();
}
Saving your model, (*9)
$simpleForm->save();
use ModelForm\FormSet;
class SimpleFormSet extends FormSet
{
public function makeForm($model=null)
{
return new SimpleForm(['model'=>$model]);
}
}
Create the empty formset instance:, (*10)
$simpleFormSet = new SimpleFormSet(['data' => Input::old() ?: Input::all());
Or create a formset filled with a model relation:, (*11)
$addressFormSet = new AddressFormSet(['relation'=>$customer->addresses(), 'data' => Input::old() ?: Input::all());
The validation and saving of formset is the symmetric with form., (*12)
if(!$addressFormSet->isValid()) {
return Redirect::back()->withErrors($addressFormSet->errors())->withInput();
}
$addressFormSet->save();