adcog-cpi/doctrine-bundle

EBDoctrineBundle

0.0.13 2016-06-08 20:23 UTC

This package is auto-updated.

Last update: 2024-09-30 01:47:17 UTC


README

一组Doctrine工具。

配置

# Default configuration for "EBDoctrineBundle"
eb_doctrine:
    filesystem:

        # Web file path.
        web_path:             /files # Example: /files

        # Secured file path.
        secured_path:         '%kernel.root_dir%/cache/%kernel.environment%/files' # Example: /var/my-data

        # Wether env is used in paths
        use_env_discriminator:  true # Example: true

        # Wether class is used in paths
        use_class_discriminator:  true # Example: true

        # File tree depth
        depth:                0 # Example: 5
    loggable:

        # Persisted message or translation key.
        persisted:            'L''élément %%entity%% a été créé avec succès !' # Example: L'élément %%entity%% a été créé avec succès !

        # Updated message or translation key.
        updated:              'L''élément %%entity%% a été modifié avec succès !' # Example: L'élément %%entity%% a été modifié avec succès !

        # Removed message or translation key.
        removed:              'L''élément %%entity%% a été supprimé avec succès !' # Example: L'élément %%entity%% a été supprimé avec succès !
    paginator:

        # Default paginator limit
        default_limit:        null # Example: 10

        # Maximum paginator limit
        max_limit:            null # Example: 100

        # Wether we have to use the output walker
        use_output_walker:    false # Example: false

使用方法

跟踪 created 日期

  • 实现 EB\DoctrineBundle\Entity\CreatedInterface
  • 使用 EB\DoctrineBundle\Entity\Doctrine\CreatedTrait
  • 创建日期将始终保存在 created 字段

跟踪 updated 日期

  • 实现 EB\DoctrineBundle\Entity\UpdatedInterface
  • 使用 EB\DoctrineBundle\Entity\Doctrine\UpdatedTrait
  • 更新日期将始终保存在 updated 字段
  • 如果此实体从未更新,则此日期将为 null

生成 slug

  • 实现 EB\DoctrineBundle\Entity\SlugInterface
  • 使用 EB\DoctrineBundle\Entity\Doctrine\SlugTrait
  • 定义自己的 getStringToSlug 方法,告诉监听器需要清理哪个字符串
  • slug 将始终保存在 slug 字段
  • 命令 eb:doctrine:fix 可以重新评估数据库中的每个 slug 字段

生成 salt

  • 实现 EB\DoctrineBundle\Entity\SaltInterface
  • 使用 EB\DoctrineBundle\Entity\Doctrine\SaltTrait
  • 盐值将始终保存在 salt 字段
  • 当前盐值是一个 sha512 哈希(见 EB\DoctrineBundle\Salt\SaltGenerator

保存实体文件

  • 实现以下接口之一
    • EB\DoctrineBundle\Entity\FileInterface(如果您不希望通过您的web服务器直接访问)
    • EB\DoctrineBundle\Entity\FileReadableInterface(存储在您的web文件夹中,添加URI路径)
    • EB\DoctrineBundle\Entity\FileVersionableInterface(跟踪不同的文件版本)
  • 使用这些特质
    • EB\DoctrineBundle\Entity\Doctrine\FileTrait
    • EB\DoctrineBundle\Entity\Doctrine\FileReadableTrait
    • EB\DoctrineBundle\Entity\Doctrine\FileVersionableTrait
  • 使用 setFile 方法将 \SplFileInfoUploadedFile 添加到实体
  • EB\DoctrineBundle\Entity\FileListener 将自动
    • 将此文件保存到文件系统中(使用实体ID和您的配置)
    • 保存其 filenameextensionsizemime
    • 保存一个 uniqid(这是一个技巧,当使用未映射的 file 字段的表单时创建映射更新)
    • 添加一个 path,文件在文件系统中的当前真实路径
    • 添加一个 uri,来自web目录
    • 如有必要,增加 version
    • 当实体被删除时,在文件系统中删除该文件

处理用户

  • 实现以下接口之一
    • EB\DoctrineBundle\Entity\UserInterface
    • EB\DoctrineBundle\Entity\UserLoginInterface
    • EB\DoctrineBundle\Entity\UserPasswordDateInterface
  • 使用这些特质
    • EB\DoctrineBundle\Entity\Doctrine\UserTrait
    • EB\DoctrineBundle\Entity\Doctrine\UserAdvancedTrait
    • EB\DoctrineBundle\Entity\Doctrine\UserLoginTrait
    • EB\DoctrineBundle\Entity\Doctrine\UserPasswordDateTrait
  • rawPassword 将始终编码为 password 并保存
  • 添加所有必要的字段和方法以创建用户
  • 跟踪当前和以前的登录日期
  • 跟踪密码更新日期

使用Doctrine事件来填充会话闪存袋消息

  • 实现 EB\DoctrineBundle\Entity\LoggableInterface
  • 配置
    • 持久化消息:'%entity% 保存!'
    • 更新消息:'%entity% 更新!'
    • 删除消息:'%entity% 删除!'
  • 所有 doctrine 事件都将写入用户会话闪存袋

您可以使用 Twig 简单地显示这些消息

    {% for level,flashes in app.session.flashBag.all() %}
        <ul class="alert alert-{{ level }}">
            {% for flash in flashes %}
                <li>{{ flash }}</li>
            {% endfor %}
        </ul>
    {% endfor %}

来自 EBStringBundle

这个包帮助我处理字符串(例如用于URI中的博客标题)。

控制器

<?php
// SomeController.php

/** @var EB\DoctrineBundle\Converter\StringConverter $string */
$string = $this->get('eb_string');

// Create a clean URI using an article title for example
$string->uri('Lorem Ipsum Dolor Sit'); // "lorem-ipsum-dolor-sit"
$string->uri('Lôrém Ïpsum Dõlor Sït'); // "lorem-ipsum-dolor-sit"
$string->uri('Lorem_Ipsum_Dolor_Sit'); // "lorem_ipsum_dolor_sit"
$string->uri('Lorem-Ipsum-Dolor-Sit'); // "lorem-ipsum-dolor-sit"
$string->uri('Lorem.Ipsum.Dolor.Sit'); // "lorem.ipsum.dolor.sit"
$string->uri('-Lorem Ipsum Dolor Sit'); // "lorem-ipsum-dolor-sit"
$string->uri('Lorem Ipsum Dolor Sit-'); // "lorem-ipsum-dolor-sit"

// Create a clean cut string
$string->uri('LoremIpsumDolorSit',15); // "LoremIpsumDolor ..."
$string->uri('Lorem Ipsum Dolor Sit',15); // "Lorem Ipsum ..."
$string->uri('Lôrém Ïpsum Dõlor Sït',15); // "Lôrém Ïpsum ..."
$string->uri('Lôrém Ïpsum Dõlor Sït',15,' (...)'); // "Lôrém Ïpsum (...)"

// Help create a search index for your objects
$string->search('Lorem Ipsum Dolor Sit'); // "lorem ipsum dolor sit"
$string->search('Lôrém Ïpsum Dõlor Sït'); // "lorem ipsum dolor sit"
$string->search('Lorem-Ipsum-Dolor-Sit'); // "lorem ipsum dolor sit"
$string->search('Lorem Ipsum Dolor Sit Lorem'); // "lorem ipsum dolor sit"
$string->search('Lorem Ipsum Dolor Si'); // "lorem ipsum dolor"

// Camelize a string
$string->camelize('Lorem Ipsum Dolor Sit'); // "loremIpsumDolorSit"
$string->camelize('Lorem_Ipsum_Dolor_Sit'); // "loremIpsumDolorSit"
$string->camelize('Lôrém Ïpsum Dõlor Sït'); // "loremIpsumDolorSit"
$string->camelize('Lôrém_Ïpsum_Dõlor_Sït'); // "loremIpsumDolorSit"
$string->camelize('loremIpsumDolorSit'); // "loremipsumdolorsit"

// Underscore a string
$string->underscore('Lorem Ipsum Dolor Sit'); // "lorem_ipsum_dolor_sit"
$string->underscore('Lôrém Ïpsum Dõlor Sït'); // "lorem_ipsum_dolor_sit"
$string->underscore('lorem_ipsum_dolor_sit'); // "lorem_ipsum_dolor_sit"

Twig模板引擎

{# SomeTemplate.html.twig #}

{# Create a clean URI using an article title for example #}
uri('Lorem Ipsum Dolor Sit') {# "lorem-ipsum-dolor-sit" #}
uri('Lôrém Ïpsum Dõlor Sït') {# "lorem-ipsum-dolor-sit" #}
uri('Lorem_Ipsum_Dolor_Sit') {# "lorem_ipsum_dolor_sit" #}
uri('Lorem-Ipsum-Dolor-Sit') {# "lorem-ipsum-dolor-sit" #}
uri('Lorem.Ipsum.Dolor.Sit') {# "lorem.ipsum.dolor.sit" #}
uri('-Lorem Ipsum Dolor Sit') {# "lorem-ipsum-dolor-sit" #}
uri('Lorem Ipsum Dolor Sit-') {# "lorem-ipsum-dolor-sit" #}

{# Create a clean cut string #}
cut('LoremIpsumDolorSit',15) {# "LoremIpsumDolor ..." #}
cut('Lorem Ipsum Dolor Sit',15) {# "Lorem Ipsum ..." #}
cut('Lôrém Ïpsum Dõlor Sït',15) {# "Lôrém Ïpsum ..." #}
cut('Lôrém Ïpsum Dõlor Sït',15,' (...)') {# "Lôrém Ïpsum (...)" #}

{# Help create a search index for your objects #}
search('Lorem Ipsum Dolor Sit') {# "lorem ipsum dolor sit" #}
search('Lôrém Ïpsum Dõlor Sït') {# "lorem ipsum dolor sit" #}
search('Lorem-Ipsum-Dolor-Sit') {# "lorem ipsum dolor sit" #}
search('Lorem Ipsum Dolor Sit Lorem') {# "lorem ipsum dolor sit" #}
search('Lorem Ipsum Dolor Si') {# "lorem ipsum dolor" #}

{# Camelize a string #}
camelize('Lorem Ipsum Dolor Sit') {# "loremIpsumDolorSit" #}
camelize('Lorem_Ipsum_Dolor_Sit') {# "loremIpsumDolorSit" #}
camelize('Lôrém Ïpsum Dõlor Sït') {# "loremIpsumDolorSit" #}
camelize('Lôrém_Ïpsum_Dõlor_Sït') {# "loremIpsumDolorSit" #}
camelize('loremIpsumDolorSit') {# "loremipsumdolorsit" #}

{# Underscrore a string #}
underscore('Lorem Ipsum Dolor Sit') {# "lorem_ipsum_dolor_sit" #}
underscore('Lôrém Ïpsum Dõlor Sït') {# "lorem_ipsum_dolor_sit" #}
underscore('lorem_ipsum_dolor_sit') {# "lorem_ipsum_dolor_sit" #}