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).
Single Commands
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 InstanceCommand
are:
executeSingle(array $data = []): array
, which does not take any$instanceId
is parameterauthorize(): bool
, in case you need to define a specific authorization, instead ofauthorizeFor($instanceId)
.
Single EntityState
Same for EntityState: in a SingleShow
case, you must implement EntityState as a Code16\Sharp\EntityList\Commands\SingleEntityState
, which differs a bit:
updateSingleState(string $stateId)
authorize(): bool
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.