andersondanilo / modelform
ModelForm is a PHP Form Abstraction for Laravel based on Django Forms and Formset, but completely integrated with the Laravel FormBuilder.
Requires
- laravel/framework: >=4.2.0
Requires (Dev)
- orchestra/testbench: 2.2.1
This package is auto-updated.
Last update: 2024-11-27 04:28:53 UTC
README
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();