- Symfony 8.1 webapp skeleton on PHP 8.5 (AssetMapper/importmap, no Node)
- Form-login gate: User entity, security.yaml, SecurityController,
app:user:create command, initial migration (user + messenger_messages)
- Bootstrap 5 + DataTables layout (base/login/home templates); any
table.datatable is auto-initialised
- trusted_proxies/headers wired for the shared Nginx Proxy Manager
- Docker (servers only): docker-compose.yml (php:8.5-fpm-alpine,
nginx:1.30-alpine, mariadb:12.3; host ports 8085/3310; external
docker_default network) + docker/{Dockerfile,php.ini,nginx,setup.sh,restart.sh}
- .env with CHANGEME placeholders (no secrets), .gitattributes enforces
LF so the deploy scripts stay runnable on Linux
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
45 lines
1.6 KiB
Twig
45 lines
1.6 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block title %}Sign in · dmtools{% endblock %}
|
|
|
|
{% block navbar %}
|
|
<nav class="navbar bg-body-tertiary border-bottom">
|
|
<div class="container">
|
|
<span class="navbar-brand">🎲 dmtools</span>
|
|
</div>
|
|
</nav>
|
|
{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="card login-card shadow-sm">
|
|
<div class="card-body p-4">
|
|
<h1 class="h4 mb-3 text-center">Sign in</h1>
|
|
|
|
<form method="post">
|
|
{% if error %}
|
|
<div class="alert alert-danger" role="alert">
|
|
{{ error.messageKey|trans(error.messageData, 'security') }}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div class="mb-3">
|
|
<label for="username" class="form-label">Email</label>
|
|
<input type="email" value="{{ last_username }}" name="_username" id="username"
|
|
class="form-control" autocomplete="email" required autofocus>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="password" class="form-label">Password</label>
|
|
<input type="password" name="_password" id="password"
|
|
class="form-control" autocomplete="current-password" required>
|
|
</div>
|
|
|
|
<input type="hidden" name="_csrf_token" data-controller="csrf-protection"
|
|
value="{{ csrf_token('authenticate') }}">
|
|
|
|
<button class="btn btn-primary w-100" type="submit">Sign in</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|