I was using 3.1.3 until a few minutes ago when 3.1.4 went up.
Controller…
<?php
use Uniform\Form;
return function($kirby, $site, $pages, $page) {
// Import Global Controller
require_once kirby()->root('controllers') . '/shared/global.php';
// Forms
// TRADE FORM
$form = new Form([
'name' => [
'rules' => ['required'],
'message' => 'Enter your name',
],
'email' => [
'rules' => ['required', 'email'],
'message' => 'Enter a valid email',
],
'company' => [
'rules' => ['required'],
'message' => 'Enter company name',
],
'btype' => [
'rules' => ['required'],
'message' => 'Enter business type',
],
'message' => [
'rules' => ['required'],
'message' => 'Enter a message',
],
], 'contact-form');
// FOOTER FORM
$newsform = new Form([
'fname' => [
'rules' => ['required'],
'message' => 'Enter your name',
],
'femail' => [
'rules' => ['required', 'email'],
'message' => 'Enter a valid email',
]
], 'footer-form');
if (r::is('POST')) {
if (get('form') === 'contact') {
$form->logAction([
'file' => kirby()->roots()->site().'/contactmessages.log',
]);
if ($form->success()) {
// redirect to success page
go('/thanks');
}
} elseif (get('form') === 'news') {
$newsform->logAction([
'file' => kirby()->roots()->site().'/newsmessages.log',
]);
if ($newsform->success()) {
// redirect to success page
go('/thanks');
}
}
}
return compact('form', 'newsform');
};
news form…
<!-- form -->
<form class="form" id="news" action="<?= $page->url() ?>/#news" method="post">
<div class="footer-form">
<div class="block-2">
<div class="block-col">
<ul class="form-flex">
<li><?= snippet('forms/inputs/fields', ['label' => 'Name:', 'name' => 'fname', 'type' => 'text', 'formname' => $newsform]) ?></li>
</ul>
</div>
<div class="block-col">
<ul class="form-flex">
<li><?= snippet('forms/inputs/fields', ['label' => 'Email:', 'name' => 'femail', 'type' => 'text', 'formname' => $newsform]) ?></li>
</ul>
</div>
</div>
<div class="block-1">
<div class="block-col">
<input type="hidden" name="form" value="news">
<?= csrf_field(); ?>
<button class="btn" type="submit" name="_submit" value="<?= $form->token() ?>"<?php e($newsform->successful(), ' disabled') ?>>Submit</button>
</div>
</div>
</div>
</form>
<!-- form -->
Contact form…
<form class="form" id="contact" action="<?= $page->url() ?>/#contact" method="post">
<div class="block-2 <?= $state ?>">
<div class="block-col">
<ul class="form-flex">
<li><?= snippet('forms/inputs/fields', ['label' => 'Name:', 'name' => 'name', 'type' => 'text', 'formname' => $form]) ?></li>
<li><?= snippet('forms/inputs/fields', ['label' => 'Company:', 'name' => 'company', 'type' => 'text', 'formname' => $form]) ?></li>
</ul>
</div>
<div class="block-col">
<ul class="form-flex">
<li><?= snippet('forms/inputs/fields', ['label' => 'Email:', 'name' => 'email', 'type' => 'text', 'formname' => $form]) ?></li>
<li><?= snippet('forms/inputs/fields', ['label' => 'Business Type:', 'name' => 'btype', 'type' => 'text', 'formname' => $form]) ?></li>
</ul>
</div>
</div>
<div class="block-1 <?= $state ?>">
<div class="block-col">
<ul class="form-flex">
<li><?= snippet('forms/inputs/fields', ['label' => 'Message:', 'name' => 'message', 'type' => 'textarea', 'formname' => $form]) ?></li>
</ul>
</div>
</div>
<div class="block-1 <?= $state ?>">
<div class="block-col">
<input type="hidden" name="form" value="contact">
<?= csrf_field(); ?>
<button class="btn" type="submit" name="_submit" value="<?= $form->token() ?>"<?php e($form->successful(), ' disabled') ?>>Submit</button>
</div>
</div>
</form>
Heres the magic snippet i used to generate the inputs…
<?php $fname = $formname ?? $form;?>
<?php if($type == 'textarea'): ?>
<div class="message">
<label for="<?= $name ?>"><?= $label ?></label>
<textarea <?php if ($fname->error($name)): ?> class="invalid"<?php endif; ?> name="<?= $name ?>" id="<?= $name ?>"><?php $fname->old($name) ?></textarea>
</div>
<?php if ($fname->error($name)): ?>
<p class="form-error-hint"><?= implode('<br>', $fname->error($name)) ?></p>
<?php endif; ?>
<?php elseif($type == 'text' || $type == 'email' || $type == 'tel' || $type == 'num'): ?>
<div>
<label for="<?= $name ?>"><?= $label ?></label>
<input<?php if ($fname->error($name)): ?> class="invalid"<?php endif; ?> name="<?= $name ?>" id="<?= $name ?>" type="<?= $type ?>" value="<?= $fname->old($name) ?>">
</div>
<?php if ($fname->error($name)): ?>
<p class="form-error-hint"><?= implode('<br>', $fname->error($name)) ?></p>
<?php endif; ?>
<?php endif ?>