View Contracts
This page covers the behaviors you can rely on when integrating with the View package.
Layout contract
setLayout(?string $layoutFile, array $assets = []): void
Use this before render().
Contract:
- stores the layout file name for later full renders
- appends any provided assets to the current layout asset list
- accepts
null, which clears the current layout selection while leaving the accumulated asset list available for later full renders
render() reads whatever layout is currently stored. It does not accept a layout argument of its own.
Parameter contract
setParam() and setParams()
These methods add data into the shared param bag.
Contract:
- later values overwrite earlier values for the same key
render()andrenderPartial()both merge their$paramsargument into the same shared bag- params remain available after rendering until
flushParams()is called or a key is overwritten getParams()andgetParam()return raw values, soRawParamwrappers stay an internal escape-hatch detail
setRawParam()
Stores one param as a RawParam wrapper.
Use it only for trusted HTML or content you intentionally do not want escaped.
getParam() and getParams()
These methods always return the unwrapped value.
If a param was stored as RawParam, callers receive the original value rather than the wrapper object.
Render contract
render(string $viewFile, array $params = []): ?string
Contract:
- requires a layout to be set first
- renders the page template first, then the layout
- returns the final layout HTML
- stores the rendered page body so
getContent()can return it afterward - registers any assets collected through
setLayout()before the layout render begins
Failure behavior:
- throws
ViewExceptionwhen no layout is set - can also surface renderer, asset, config, DI, session, database, or app-level exceptions from its dependencies
renderPartial(string $viewFile, array $params = []): string
Contract:
- does not require a layout
- returns the requested fragment HTML
- keeps the existing full-render page body available through
getContent() - merges the provided params into the shared param bag before rendering
Use it for partials, snippets, or error fragments that should not go through the full page pipeline.
Content contract
getContent(): ?string
Returns the last body view generated by render(), including after later partial renders.
Failure behavior:
- throws
ViewExceptionif no full render has happened yet
If your code only used renderPartial(), getContent() is still considered unavailable.
Cache contract
render() renders body and layout, then writes the final HTML using the current request URI as the cache key when view cache is enabled.
Important boundary:
- caching happens after both the body and layout are rendered
- this path does not short-circuit rendering before layout generation
- only full
render()participates - no request URI means no cache write/read path