adcog-cpi / doctrine-bundle
EBDoctrineBundle
0.0.13
2016-06-08 20:23 UTC
Requires
- php: >=5.5
- doctrine/doctrine-bundle: ~1.2
- doctrine/orm: ~2.2,>=2.2.3
- symfony/symfony: ~2.6
Requires (Dev)
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
方法将\SplFileInfo
或UploadedFile
添加到实体 EB\DoctrineBundle\Entity\FileListener
将自动- 将此文件保存到文件系统中(使用实体ID和您的配置)
- 保存其
filename
、extension
、size
和mime
- 保存一个
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" #}