Skip to content
A form helper for Kirby CMS based websites and apps, using the Post/Redirect/Get pattern.
Branch: master
Clone or download
Pull request Compare This branch is 34 commits ahead, 1 commit behind jevets:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.editorconfig Set up tests and do some minor refactoring Feb 5, 2017
LICENSE Set up tests and do some minor refactoring Feb 5, 2017
phpunit.xml Set up tests and do some minor refactoring Feb 5, 2017

Kirby Form

Build Status

This is a fork of jevets\kirby-form.

A helper library for working with Kirby forms, using the Post/Redirect/Get design pattern.

Quick Example

$form = new Form([
    'name' => [
        'rules'     => ['required'],
        'message'   => ['Name is required']
    'phone' => [],

if ($form->validates()) {
    // Validation passed
    // Do something with the data


Install with composer:

# Kirby 2
composer require mzur/kirby-form:^1.0
# Kirby 3
composer require mzur/kirby-form:^2.0

Basic Example

This example assumes you're using page controllers in Kirby and that your page's URI is /my-page.

// site/templates/my-page.php

<?php snippet('header') ?>

    <?php snippet('form-errors', ['form' => $form]) ?>

    <form method="POST">
        <input name="name" value="<?= $form->old('name') ?>">
        <input name="phone" value="<?= $form->old('phone') ?>">
        <?= csrf_field() ?>
        <input type="submit" value="Submit">

<?php snippet('footer') ?>
// site/snippets/form-errors.php

<?php if (count($form->errors()) > 0): ?>
    <div class="alert alert-error">
        <?php foreach ($form->errors() as $key => $errors): ?>
            <div><?= implode('<br>', $errors) ?></div>
        <?php endforeach ?>
<?php endif ?>
// site/controllers/my-page.php

use Jevets\Kirby\Form;

return function ($kirby) {

    // Initialize the Form
    $form = new Form([
        'name' => [
            'rules'     => ['required'],
            'message'   => ['Name is required']
        'phone' => [],

    // Process the form on POST requests
    if ($kirby->request()->is('POST')) {
        if ($form->validates()) {
            // Show a thanks page
        } else {
            // Redirect back to the GET form

    return compact('form');


Feel free to send a pull request!


Please use the GitHub issue tracker.

You can’t perform that action at this time.