Using SingleShow for unique resources
Sometimes you will need to configure a "unique" resource that does not fit into a List / Show schema, like for instance an account, or a configuration item. To handle this kind of "unique" resource, Sharp provides a way to build SingleShows.
Write the class
Instead of extending
SharpShow, our SingleShow implementation should extend
Code16\Sharp\Show\SharpSingleShow. We still have to implement
buildShowFields(FieldsContainer $showFields) and
buildShowLayout(ShowLayout $showLayout) to declare the fields presenting the instance, an optionally
buildShowConfig(), but the
find() method is different:
findSingle(): array, without any parameter because in a single case the functional code has to determine the instance on its side (based on the current user, for instance).
Declared Commands must also be implemented as single. Like for Shows, this only means extending a more specific abstract class:
Code16\Sharp\EntityList\Commands\SingleInstanceCommand. The two differences with regular
executeSingle(array $data = ): array, which does not take any
authorize(): bool, in case you need to define a specific authorization, instead of
Same for EntityState: in a
SingleShow case, you must implement EntityState as a
Code16\Sharp\EntityList\Commands\SingleEntityState, which differs a bit:
Linking a SingleShow to the main menu
SingleShow can of course be linked in the menu:
config/sharp.php return [ [...] "entities" => [ [...], "account" => [ "show" => AccountSingleSharpShow::class, "form" => AccountSingleSharpForm::class, ] ], "menu" => [ [...], [ "label" => "My account", "icon" => "fa-user", "entity" => "account", "single" => true ] ] ];
Nothing different on the
entities part, but do note the
"single" => true in the
menu to tell Sharp to treat this entity as a SingleShow.
What if you need a Form?
Well, that's a SingleForm then.