aurmil / slim3-skeleton
Slim Framework 3 应用程序骨架
Requires
- php: >=7.0.0
- akrabat/rka-slim-session-middleware: ^2.0
- monolog/monolog: ^1.21
- roave/security-advisories: dev-master
- slim/csrf: ^0.8.1
- slim/flash: ^0.2.0
- slim/slim: ^3.5
- slim/twig-view: ^2.2
- swiftmailer/swiftmailer: ^6.0
- symfony/yaml: ^3.1
Requires (Dev)
- symfony/var-dumper: ^3.3
README
包含什么?
- Slim v3
- Slim Twig-View + Twig v2
- Slim Flash Messages
- Slim CSRF 保护
- Akrabat Slim Session 中间件
- Symfony Yaml 组件 v3
- Swift Mailer v6
- Monolog v1
安装
要求:PHP 7 和 Composer
运行以下命令,将 [your-project-name]
替换为你想要创建的文件夹名称。
composer create-project aurmil/slim3-skeleton [your-project-name]
此骨架包含一个用于 Apache 的 .htaccess
文件,但 Slim 支持其他 Web 服务器。
- 可选:创建一个指向
public
文件的虚拟主机 - 当使用 Apache 时,确保项目路径(或父文件夹)具有
AllowOverride All
以使 Slim URL 重写 生效 - 确保
var
文件夹可由 Web 服务器写入
配置
配置文件存储在 config
文件夹中。每个主题/包有一个 YAML 文件,以便更好地阅读/管理。其他特定于包的配置文件也可以存储在那里(然后在应用程序代码中处理)。您还可以将所需的内容添加到 app.yaml
文件中,因为使用新的配置值在应用程序代码中取决于您。
某些配置值可能从一种环境更改为另一种环境。当前环境名称从 ENVIRONMENT
环境变量中读取(默认 = development
)。特定于环境的配置文件覆盖全局配置的值。只需将现有 YAML 文件复制粘贴到以有效环境名称命名的文件夹中。然后编辑此文件,删除除了您想要为此环境更改的值之外的所有内容。在 development-example
和 production-example
文件夹中有示例。
配置通过以下方式在应用程序中可用
src/bootstrap.php
中的$config
变量- 容器
settings
条目:$container->settings
通常,并在扩展App\Controllers\Controller
的控制器中为$this->settings
- 在 Twig 模板中的
config
变量:{{ config.my_custom_setting_key }}
,但它只包含app
和security
配置文件
控制器
控制器可以继承自 App\Controllers\Controller
类。
它提供了一个 render()
方法,并可通过 $this->my_service_entry_name
自动访问 Slim 容器条目。
会话
在 session.yaml
配置文件中,您可以选择启用或禁用会话使用。
如果您想使用 Flash 消息或 CSRF 保护,则需要会话。
CSRF
如果启用了会话,则每个请求都会生成 CSRF 令牌。
在 security.yaml
配置文件中,您可以选择启用令牌持久性:为每个用户生成一个令牌,而不是为每个请求生成。这简化了 Ajax 的使用,但如果您不使用 HTTPS,则会使应用程序容易受到重放攻击。
如果 CSRF 检查失败,则请求将有一个 csrf_status
属性设置为 false。您可以在路由/控制器中检查此属性/值。
if (false === $request->getAttribute('csrf_status')) { // CSRF check failed }
在 Twig 模板中,您可以使用以下方法添加 CSRF 隐藏字段
{{ csrf() }}
如果您想自定义某些内容,也可以访问CSRF令牌值。
{{ csrf_token.keys.name }} {{ csrf_token.keys.value }} {{ csrf_token.name }} {{ csrf_token.value }}
闪存消息
如果启用了会话,则可用闪存消息。
在路由/控制器中添加消息
$this->flash->addMessage('my_key', 'my_value');
在Twig模板中获取消息
{% set my_var = flash('my_key') %}
获取所有消息
{% set my_var = flash() %}
电子邮件
在swiftmailer.yaml
配置文件中,您可以选择启用SwiftMailer,然后使用容器中的mailer
条目作为代码中的Swift_Mailer对象。
通过在monolog.yaml
配置文件中配置SwiftMailerHandler
(+ swiftmailer.yaml
文件)或NativeMailerHandler
,可以在发生错误时启用或禁用Monolog发送电子邮件。
HTML元标签
您在app.yaml
配置文件中的metas
下添加的每个key: value
对都将作为元标签输出到HTML头部。
标题
页面标题是一个特殊案例。显然,title
和title_separator
条目不会像其他条目一样输出为元标签。
页面标题的组成如下
- 模板子项可以定义的
metaTitle
块的content
{% block metaTitle %}my custom page title{% endblock %}
- 如果
app.metas.title
配置条目不为空- 如果
app.metas.title_separator
配置条目不为空,则添加分隔符 - 添加
app.metas.title
- 如果
代码质量工具
运行以下命令以检查您的代码
- PHP_CodeSniffer
vendor/bin/phpcs --standard=PSR1,PSR2,PSR12 ./src/
- PHP Coding Standards Fixer
vendor/bin/php-cs-fixer fix ./src/ --verbose --dry-run --diff
- PHP Mess Detector
vendor/bin/phpmd ./src/ text cleancode,codesize,controversial,design,naming,unusedcode
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。