Files
InvoiceShelf/app/Platform/Pdf/Rules/CssLength.php
T
Darko Gjorgjijoski 5ef7804e60 refactor: adopt modular domain architecture (#747)
* refactor: stabilize model identities for domain migration

* refactor: extract module platform context

* refactor: assign models to domain contexts

* refactor: extract ai platform context

* refactor: extract storage platform context

* refactor: extract mail platform context

* refactor: extract pdf platform context

* refactor: extract operations platform context

* refactor: move installation into operations platform

* refactor: extract money domain context

* refactor: extract taxation domain context

* refactor: extract catalog domain context

* refactor: extract metadata domain context

* refactor: extract reporting domain context

* refactor: extract purchases domain context

* refactor: extract receivables domain context

* refactor: extract accounts domain context

* refactor: complete reporting statement boundary

* refactor: extract contacts domain context

* refactor: extract sales domain context

* refactor: remove legacy application layers

* fix: migrate legacy bouncer role identities
2026-08-05 17:40:03 +02:00

31 lines
935 B
PHP

<?php
namespace App\Platform\Pdf\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
/**
* A single CSS length: a number and one of the units both PDF drivers accept.
*
* Used for page dimensions and margins, which are handed to Gotenberg as strings
* and converted to points for dompdf. Empty values pass through so it composes
* with `nullable`.
*/
class CssLength implements ValidationRule
{
/** A bare `0` is valid CSS and the only length that needs no unit. */
public const PATTERN = '/^(0|\d+(\.\d+)?(pt|px|pc|mm|cm|in))$/';
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (! is_string($value) || trim($value) === '') {
return;
}
if (! preg_match(self::PATTERN, trim($value))) {
$fail('The :attribute must be 0, or a number followed by pt, px, pc, mm, cm or in (e.g. "210mm").');
}
}
}