blob: fe7b71f54d0719040c4e5b43ed60c21da6ed9940 (
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
|
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
```
|