blob: bd67538a4fcf2f4074f9535d05e7bd3f518e82b0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
Flat-File Forms
===
Forms and Submissions managed flat-file
Callable via REST-API
## Directory Structure
- config.yaml (main config)
- $contentFolder/
- config/
- $group/
- $pluginsFolder/
- $pluginName/
- Plugin.php
### config consists of
- config/
- config.yaml
- functions.php
### $group consists of
- $group/
- config/
- $form/
### $form consists of
- $form/
- config/
- entries/
- $year
- $month
- $day
- \$year\$month\$day_\$hour\$minute_\$hash.yaml
- fields/
- _fields.yaml
- email.yaml
- name.yaml
## config
adjust $contentFolder and $pluginsFolder path in main config.yaml
`config.yaml` with config values in $contentFolder/config/
overwritten by config.yaml in $group/config/
overwritten by config.yaml in $form/config/
`functions.php` with custom code in $contentFolder/config/
included if exists in subsequent config folders
## REST-API
`localhost:3000/$group/$group/$form`
`GET` `...$form/fields`
`GET` `...$form/entries?dateFrom=$date`
`POST` `...$form/validate`
`POST` `...$form/submit`
## Plugins
1. create `$pluginName` directory in $pluginsFolder
2. create `Plugin.php` with `FlatFileForms\Plugins\$pluginName` namespace and `Plugin` class
3. write code in `__construct` method
## Docker
*docker-compose.yml*
```yaml
version: "3.7"
services:
app:
build: .
volumes:
- "./config.yaml:/app/config.yaml:ro"
- "./content:/app/content"
- "./plugins:/app/plugins"
nginx:
image: nginx:alpine
ports:
- "8080:80"
environment:
- "PHP_SERVICE_DOCUMENT_ROOT=/app/public"
- "PHP_SERVICE_NAME=app"
- "PHP_SERVICE_PORT=9000"
volumes:
- "./default.conf.template:/etc/nginx/templates/default.conf.template"
```
*default.conf.template*
```nginx
server {
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
root ${PHP_SERVICE_DOCUMENT_ROOT}; # ex.: /app/public
fastcgi_pass ${PHP_SERVICE_NAME}:${PHP_SERVICE_PORT}; # ex.: php:9000
include fastcgi.conf;
}
}
```
then run
```
touch config.yaml # copy from config.example.yaml
mkdir content
mkdir plugins
docker-compose up -d
```
## Examples
Set `contentFolderPath` in root `config.yaml` to `./examples/$example/content`, `pluginsFolderPath` to `./examples/$example/plugins` and run the app.
|