nuxia / nuxia-plugin
Nuxia插件
Requires
- php: >=5.4
- doctrine/common: ^2.3
- doctrine/orm: ^2.3
- gedmo/doctrine-extensions: ^2.3
- knplabs/knp-components: ^1.3
- psr/log: ^1.0
- symfony/console: ^2.8|^3.0
- symfony/dependency-injection: ^2.8|^3.0
- symfony/event-dispatcher: ^2.8|^3.0
- symfony/filesystem: ^2.8|^3.0
- symfony/finder: ^2.8|^3.0
- symfony/form: ^2.8|^3.0
- symfony/framework-bundle: ^2.8|^3.0
- symfony/http-foundation: ^2.8|^3.0
- symfony/http-kernel: ^2.8|^3.0
- symfony/property-access: ^2.8|^3.0
- symfony/routing: ^2.8|^3.0
- symfony/security-core: ^2.8|^3.0
- symfony/templating: ^2.8|^3.0
- symfony/twig-bridge: ^2.8|^3.0
- symfony/validator: ^2.8|^3.0
- symfony/yaml: ^2.8|^3.0
Requires (Dev)
- fabpot/php-cs-fixer: ^1.12
This package is not auto-updated.
Last update: 2024-09-14 17:53:33 UTC
README
摘要
- 设置KnpLabs的
pager
:/doc/knp_paginator.md
- 设置
valuelist
和解析器使用:/doc/value_list_and_utilities.md
- 在路由中使用对象:
/doc/router.md
- 处理
jsons
字段:/doc/json_form_and_object.md
- 处理媒体:
/doc/media.md
- 自定义验证约束:
/doc/validation_constraints.md
- 使用管理器管理安全性:
/doc/security.md
- 使用自定义类型:
/doc/form_type.md
- 自定义表单渲染:
/doc/form_layout.md
Symfony2概述
表单翻译
翻译labels
、help
、empty_value
、choices
等,通过每个表单字段的translation_domain
选项完成。要为整个表单使用相同的域名,可以在表单的setDefaultsOptions
方法中添加以下行。同时,请注意,我们始终可以针对特定字段自定义域名。
$resolver->setDefaults(array('translation_domain' => 'form', /*autres options*/));
按照惯例,我们使用form
作为域名
具有上传字段的表单注意事项
通常,为了从控制器中处理表单,我们会检查请求是否包含与表单名称对应的参数,以避免不必要的bind
操作。对于具有上传字段的表单,需要省略此指令,因为文件大小可能会超过php允许的大小(php.ini
文件中的post_max_size
参数),这可能导致错误。
向所有twig模板注入参数/服务
需要在app/config.yml
文件中添加以下行
twig:
globals:
parametre: "%parametre%"
service: "@monservice"
NuxiaBundle
一般
创建自定义实体管理器
实体管理器非常有用,可以集中执行操作。我们的bundle提供了一个抽象类(Nuxia\Component\Doctrine\Manager\AbstractEntityManager
)和一个接口(Nuxia\Component\Doctrine\Manager\EntityManagerInterface
)。
安装
要将Nuxia bundle添加到项目中,需要修改两个文件
- 在AppKernel.php文件的方法registerBundles中添加bundle。
public function registerBundles()
{
...
// Nuxia vendors
new Nuxia\Bundle\NuxiaBundle\NuxiaBundle(),
...
- 修改composer.json文件的autoload部分
"autoload": {
"psr-0": {
"Nuxia": "vendor/nuxia/src/",
"": "src/"
}
},
配置
某些选项可以从加载Nuxia bundle的应用程序的app/config.yml
文件中进行配置。以下是配置框架及其默认值
nuxia:
disable_password: false
mailer:
from:
email: "noreply@nuxia.fr"
name: "Nuxia"
validator:
reserved_words: "[]"
我们将详细说明配置文件中的每一行及其在功能中的应用。
功能
不输入密码登录
此功能允许用户在disable-password
设置为true
时(参见配置)无需输入密码登录。为此,我们已覆盖了服务security.authentication.provider.dao
,并使用我们的类Nuxia\Bundle\NuxiaBundle\Security\AuthenticationProvider
。
控制器
*todo:这是一个草案,需要根据最佳实践进行修改(将控制器用作服务,仅注入必要的依赖项)。
Nuxia\Bundle\NuxiaBundle\AbstractController
类是所有定义为服务的控制器的基类。因此,它不继承自ContainerAware
。
parameters:
#nuxia.controller.class: Nuxia\Controller\AbstractController
services:
nuxia.controller:
class: "%nuxia.controller.class%"
scope: "request"
abstract: true
public: false
calls:
- [ "setRouter", [ "@router" ] ]
- [ "setTempmlating", [ "@templating" ] ]
- [ "setRequest", [ "@request" ] ]
请注意,该类中没有构造函数,因此必须在子类中定义它,并且可以通过%nuxia.controller.class%
参数修改该类。
要定义控制器为服务,只需编写以下指令即可
services:
example:controller:
class: Nuxia/ExampleBundle/ExampleController
parent: "nuxia.controller"
arguments:
#arguments du constructeur
除了向控制器注入“必需”的服务外,这个类还提供了一组所谓的快捷方法。
getReferer($default)
允许生成上一页的 URL。如果上一页的 URL 等于当前页面的 URL,则重定向到$default
以避免无限循环。(这个 referer 系统将被审查,我们将存储 x 个最新的 URL,而不是使用默认值)。
Mailer
在 Symfony 项目中,我们经常需要使用模板 Twig
来自定义邮件的渲染。服务 nuxia.mailer
允许我们做到这一点。
nuxia.mailer:
class: "%nuxia.mailer.class%"
arguments:
- "@mailer"
- "@templating.engine.twig"
- {}
- { language: "fr", template: "NuxiaBundle:Mailer:default"}
我们注意到构造函数接受两个参数(构造函数的第 3 和第 4 个参数)。
地址表
第一个数组(构造函数的第 3 个参数)允许管理电子邮件的不同收件人和发件人。对于此数组的每个元素,我们可以定义一个电子邮件或一个具有键为电子邮件和值为要显示的名称的数组的表格。我们还可以定义一个电子邮件或数组的数组,如果有多位收件人或发件人。
默认发件人(from
)可以通过配置文件进行自定义(见配置)。我们还可以覆盖数组的 from
键。收件人 to
、cc
和 cci
分别通过 to
、cc
和 bcc
键定义。必须在发送电子邮件之前提供 to
键。
此数组仅在构造函数和下面的 sendMessage
方法中可修改。
模板参数表
第二个(构造函数的第 4 个参数)允许自定义电子邮件的渲染。
键 language
允许指定用于渲染电子邮件的模板。我们将其与键 language
配对,以便直接在模板中翻译电子邮件(以免过载 yml 文件)。使用 NuxiaBundle:Mailer:default
作为模板和 fr
作为语言,我们的模板路径如下: NuxiaBundle/Resources/Mailer/fr/default.html.twig
。
键 parameters
允许向模板添加变量。我们可以使用 addTemplate parameters
方法添加简单的变量或使用 addLink
方法添加链接。
对象和发送电子邮件
我们还需要一个对象来完善我们的电子邮件。有两种方式可以指定它。
- 我们可以使用
setSubject
方法。 - 我们可以在模板中定义一个
subject
块。
{% block subject %}
{%- autoescape false -%}
{{ 'restitution.mail_subject.validated.found'|trans({}, 'messages', language) }}
{%- endautoescape -%}
{% endblock %}
一旦正确配置了 mailer,电子邮件的发送就通过 sendMessage($addresses, $template)
方法完成,我们可以在其中覆盖 mailer 的参数。变量 addresses 可以是一个具有上述键的数组(参见地址表)或只是一个作为 to
的电子邮件。
将所有电子邮件发送到单个地址
在测试和开发版本中,我们使用 delivery_address
参数将所有电子邮件发送到单个地址。此参数在 parameters.yml
文件中定义。
parameters:
delevery_addresse: "example@nuxia.fr"
*待办事项:需要找到一种巧妙的方法来发送多条消息,因为目前的 mailer 还没有适应这种使用。
模板中额外的 Twig 方法
该捆绑包允许加载 Twig
的扩展,这提供了额外的方法和过滤器。这些扩展 Text
和 Intl
是 Twig
的本地扩展(参见 http://tinyurl.com/cer432j)。
我们的扩展 Nuxia\Bundle\NuxiaBundle\Twig\NuxiaTwigExtension
添加了以下方法和过滤器
- 过滤器 camelize,可以将字符串转换为
CamelCase
('ordered_list'|camelize -> 'OrderedList')。 - 过滤器 underscore,可以将字符串转换为
underscore_case
('OrderedList'|camelize -> 'ordered_List')。
在 services.yml
文件中使用标签 twig.extension
来加载 Twig
扩展
services:
nuxia.twig.extension:
class: Nuxia\Bundle\NuxiaBundle\Twig\NuxiaTwigExtension
public: false
tags:
- { name: "twig.extension" }
AbstractEntityManager.php
允许为实体 Doctrine
的管理者添加全局属性和方法。
LogListener.php
允许为 Doctrine 实体的 loggable
监听器添加全局属性和方法。例如,为想要记录日志的对象提供 getDefaultUser
方法。