The HTML rule runs again in Go.
Both halves are in the app above. The input carries required, and ctx.ValidateForm() re-runs exactly that rule on the server — a client that skipped it, scripting off or a direct POST, gets the same answer. Then strings.EqualFold(name, "admin") adds the rule HTML has no way to state.
The template side is the other two lines you read: {{.lvt.AriaInvalid "name"}} marks the field, {{.lvt.ErrorTag "name"}} is where the message lands. Returning an error from Greet is the whole mechanism — there's nothing to route. Scroll up and type admin, or try the smaller app here.
The template side is the other two lines you read: {{.lvt.AriaInvalid "name"}} marks the field, {{.lvt.ErrorTag "name"}} is where the message lands. Returning an error from Greet is the whole mechanism — there's nothing to route, and the error handling reference has the rest. Scroll up and type admin, or try the smaller app here.
sess.TriggerAction("ServerRefresh", nil)
- You already read the WithTopicACL in main that admits "wall" — developer topics are deny-all until you name one. This is the same publish path with no user action behind it: the "the server said hi at …" line in the cards above, pushed on a timer.
You already read the WithTopicACL in main that admits "wall" — developer topics are deny-all until you name one. This is the same publish path with no user action behind it: the "the server said hi at …" line in the cards above, pushed on a timer. The pubsub reference has the topic rules and the ACL in full.
The rest of the docs covers the ordinary screens.
-Admin panels, internal tools, CRUD, dashboards, approvals, uploads, auth, and the occasional shared view. That is what this is for.
+Your app has file uploads and a login. Both are here.
+The wall is one screen, and it needed neither. Sessions, navigation, scaling and something to look at when it falls over at 3am are below too. Admin screens, internal tools, CRUD and dashboards are what this is built for.