Model Form Example¶
The Model Class¶
namespace App\Models;
use Eddmash\PowerOrm\Model\Model;
/**
* Class Author
*/
class Author extends Model
{
public function unboundFields()
{
return [
'name'=>Model::CharField(['maxLength'=>25]),
'date'=>Model::DateField(),
];
}
}
The form that represents the Author Model
The Model Form Class¶
namespace App\Forms;
use Eddmash\PowerOrm\Form\Form;
use Eddmash\PowerOrm\Form\ModelForm;
use Eddmash\PowerOrm\Form\Validations\MaxValueValidator;
use Eddmash\PowerOrm\Form\Widgets\DateInput;
use Eddmash\PowerOrm\Form\Widgets\EmailInput;
use Eddmash\PowerOrm\Form\Widgets\NumberInput;
use Eddmash\PowerOrm\Form\Widgets\TextInput;
/**
* Class AuthorForm
* @package App\Forms
* @author: Eddilbert Macharia (http://eddmash.com)<edd.cowan@gmail.com>
*/
class AuthorForm extends ModelForm
{
protected $modelClass = 'App\Models\Author';
protected $excludes = ['id'];
public function fields()
{
return [
'date2' => Form::DateField(
[
'widget' => DateInput::instance(['class' => 'form-control']),
'required'=>false
]
),
'age' => Form::IntegerField(
[
'validators'=>[MaxValueValidator::instance(['max'=>10])],
'required'=>false,
'widget' => NumberInput::instance(['class' => 'form-control']),
'helpText'=>"What is your age"
]
),
'email' => Form::EmailField([
'required'=>false,
'widget' => EmailInput::instance(['class' => 'form-control']),
]),
];
}
public function widgets()
{
return [
'date' => DateInput::instance(['class' => 'form-control']),
'name' => TextInput::instance(['class' => 'form-control']),
];
}
}
The template¶
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<?php
/**@var $form \Eddmash\PowerOrm\Form\Form */
?>
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<form method="post" action="" enctype="multipart/form-data" novalidate>
<?=$form;?>
<input type="submit" value="Send" name="Send">
</form>
</div>
</div>
</div>
The Rendering fields manually¶
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<?php
/**@var $form \Eddmash\PowerOrm\Form\Form */
?>
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<form method="post" action="" enctype="multipart/form-data" novalidate>
<?php
dump($form->nonFieldErrors());
/**@var $field \Eddmash\PowerOrm\Form\Fields\Field */
foreach ($form as $field):?>
<div class='form-group'>
<label for='"<?= $field->getIdForLabel(); ?>'><?= $field->getLabelName(); ?></label>
<?= $field; ?>
<?= $field->getHelpText(); ?>
</div>
<?php endforeach;
?>
<input type="submit" value="Send" name="Send">
</form>
</div>
</div>
</div>