nuxia/nuxia-plugin

dev-master 2016-10-20 12:32 UTC

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概述

表单翻译

翻译labelshelpempty_valuechoices等,通过每个表单字段的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 键。收件人 tocccci 分别通过 toccbcc 键定义。必须在发送电子邮件之前提供 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 的扩展,这提供了额外的方法和过滤器。这些扩展 TextIntlTwig 的本地扩展(参见 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 方法。