Sapphire provides a components system based like in frontend frameworks (vue, angular). Components are not reactive (they do not re-render at state change yet).
They are used to render page layouts.
Components consists of 2 main elements:
- Component controller (Name.component.php)
- Component view (Name.onyx)
Using component in onyx
#component("ComponentName", [ "title" => "First parameter" ])
Component controller
Contains methods and properties of component and control component view.
You can add there component helpers (Translation, Styles, Assets)
<?php use Sapphire\Component\Component; use Sapphire\Component\Helpers\Styles; return (new class extends Component { use Styles; public int $number = 0; public function Mounted(): void { $this->number = random_int(0, 100); } /////////////////////////////////////////////////////////// // Rendering (.onyx, .php or .html) /////////////////////////////////////////////////////////// public function View(): string { return "ComponentView.onyx"; } });
Component view
Contains onyx code that tells how to render component
<?php use Sapphire\Page\Page; ?> <div class="view"> -- Using other classess -- <h1 class="header">{Page::Current()->GetName()}</h1> -- Using component properties (generated in component controller) -- Random number: {$props->number} <hr> -- Using parameters passed for component -- {$params->parameter_name} </div> -- Linking styles -- #{Styles(style: "Filename.css", scoped: true)}
Component styling
You can easily add styles into every component (using Styles helper). Sapphire automatically adds style file into component.
#{Styles(style: "Filename.css", scoped: true)}
Sapphire also provides way to scope styles, if scoped parameter is enabled then you can use scopes inside style.
To scope element add prefix @ inside style.
@ .topbar { background: #0004; }
Component helpers
- Sapphire\Component\Helpers\Translator
- Sapphire\Component\Helpers\Styles
- Sapphire\Component\Helpers\Assets