Add form conventions man page and CLAUDE.md documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-12-23 10:01:04 +00:00
parent c7a2ec94ab
commit 192811e48a
2 changed files with 391 additions and 0 deletions

View File

@@ -891,6 +891,39 @@ class My_Form extends Component {
**Validation**: `Form_Utils.apply_form_errors(form.$, errors)` - Matches by `name` attribute.
### Form Conventions (Action/Controller Pattern)
Forms follow a load/save pattern mirroring traditional Laravel: Action loads data, Controller saves it.
```javascript
// Action: on_create() sets defaults, on_load() fetches for edit mode
on_create() {
this.data.form_data = { title: '', status_id: Model.STATUS_ACTIVE };
this.data.is_edit = !!this.args.id;
}
async on_load() {
if (!this.data.is_edit) return;
const record = await My_Model.fetch(this.args.id);
this.data.form_data = { id: record.id, title: record.title };
}
```
```php
// Controller: save() receives all form values, validates, persists
#[Ajax_Endpoint]
public static function save(Request $request, array $params = []) {
if (empty($params['title'])) return response_form_error('Error', ['title' => 'Required']);
$record = $params['id'] ? My_Model::find($params['id']) : new My_Model();
$record->title = $params['title'];
$record->save();
return ['redirect' => Rsx::Route('View_Action', $record->id)];
}
```
**Key principles**: form_data must be serializable (plain objects, no models) | Keep load/save in same controller for field alignment | on_load() loads data, on_ready() is UI-only
Details: `php artisan rsx:man form_conventions`
---
## MODALS