Milk Admin

Expression System

Milk Admin includes a mini expression language that runs both frontend and backend. This allows using the same logic for calculations, validation, conditional required fields and visibility.

Implementations:
  • milkadmin/App/ExpressionParser.php (backend PHP)
  • milkadmin/Theme/Assets/expression-parser.js (frontend JS)

What you can do with expressions

  • Calculate fields automatically (e.g. total = quantity * price)
  • Validate values with custom rules (e.g. end date > start date)
  • Show/hide fields or containers based on conditions
  • Make a field required only if a condition is true

Where they are executed

  • Frontend: expression-parser.js + milk-form.js evaluate expressions in real-time on form values.
  • Backend: ExpressionParser.php validates data and calculates fields during validate() and fill().
Note: visibility (show/hide) is a frontend feature. On the backend you can still use requireIf() and validateExpr() to maintain data consistency and security.

Example

In the Model (RuleBuilder):

public function configure($rule)
{
    $rule->int('qty')->required();
    $rule->float('price')->required();

    $rule->float('total')->calcExpr('[qty] * [price]');

    // Conditional required backend
    $rule->string('notes')
        ->requireIf('[qty] > 10')
        ->error('Notes required for quantity > 10');
}

In the FormBuilder (frontend):

$form->field('total');
$form->field('notes')->requireIf('[qty] > 10', 'Notes required for quantity > 10');
$form->showIf('notes', '[qty] > 10');

The FormBuilder inherits expressions from the model, but it's possible to modify them or add new ones.

Loading...