zf3belcebur / doctrine-orm-resources
此包已被废弃,不再维护。未建议替代包。
DoctrineORM 资源到 ZF3
v1.0.4
2019-11-04 12:38 UTC
Requires
- php: ^7.1
- beberlei/doctrineextensions: ^1.0
- creof/doctrine2-spatial: ^1.0
- doctrine/doctrine-module: 2.*
- doctrine/doctrine-orm-module: 2.*
- gedmo/doctrine-extensions: 2.*|3.*
- zendframework/zend-form: ^2.0
Suggests
- nesbot/carbon: A API extension for DateTime that supports 281 different languages.
- zf3belcebur/doctrine-orm-fast-api: Quickly create an automatic API CRUD with your Doctrine ORM connection
- zf3belcebur/materialize-css-helper: MaterializeCss Helper integration to ZF3
- zf3belcebur/mongodb-logger: MongoDb Logger integration to ZF3
- zf3belcebur/mvc-basic-tools: ZF3 tools for controllers,views,helpers, plugins and more ...
- zf3belcebur/oauth2-social-client: ZF3 extends module from thephpleague/oauth2-client
README
DoctrineORMResources
整合不同模块,为 DoctrineORM & ZF3 提供新资源
- doctrine/doctrine-module
- doctrine/doctrine-orm-module
- creof/doctrine2-spatial
- beberlei/doctrineextensions
- gedmo/doctrine-extensions
查看
安装
此模块的安装使用 composer。有关 composer 文档,请参阅 getcomposer.org。
composer require zf3belcebur/doctrine-orm-resources
然后,将 ZF3Belcebur\DoctrineORMResources
添加到您的 config/application.config.php
实体特性
ZF3\DoctrineORMResources\EntityTrait\Coordinates
- 纬度和经度字段
ZF3\DoctrineORMResources\EntityTrait\GedmoEntityTranslatable
- Gedmo 区域字段
ZF3\DoctrineORMResources\EntityTrait\Timestamp
- 使用 Gedmo Timestampable 的 modified_at 和 created_at 字段
通过 \ZF3Belcebur\DoctrineORMResources\Repository\BaseEntityRepository
扩展您的存储库
扩展 Doctrine\ORM\EntityRepository
以访问使用 Zend\Http\PhpEnvironment\Request
、Zend\Mvc\I18n\Router\TranslatorAwareTreeRouteStack
、Zend\Router\RouteMatch
和 Zend\Router\RouteStackInterface
,并使用新的方法 findByQb
return [ 'doctrine' => [ 'configuration' => [ 'orm_default' => [ 'class_metadata_factory_name' => ClassMetadataFactory::class, 'repository_factory' => BaseRepository::class, ] ] ];
存储库后构造事件
- 如果您需要在存储库的 __construct 之后执行某些操作,则需要扩展您的存储库类
ZF3Belcebur\DoctrineORMResources\Repository\BaseEntityRepository
并实现ZF3Belcebur\DoctrineORMResources\Repository\PostConstructInterface
。
如何将 GedmoSortableListener 集成到您的存储库中
- 在您的配置中启用 Sortable Listener
return [ 'doctrine' => [ 'eventmanager' => [ 'orm_default' => [ 'subscribers' => [ TranslatableListener::class, TimestampableListener::class, SortableListener::class, ], ], ], ], ];
- 在您的存储库中实现
PostConstructInterface
事件,使用ZF3Belcebur\DoctrineORMResources\RepositoryTrait\SortableListenerAdapterTrait
/** * CustomRepo * * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ class CustomRepo extends BaseEntityRepository implements PostConstructInterface { use \ZF3Belcebur\DoctrineORMResources\RepositoryTrait\SortableListenerAdapterTrait; public function postConstruct(): void { $this->initListenerConfig(); } }
新方法 getEntityAlias()
// Entity --> Application\Entity\Admin1 echo $admin1Repo->getEntityAlias(); // --> "a"
新方法 getQueryWithGedmoTranslation()
此方法将 Gedmo Walkers 和 Hints 应用于查询,从参数中获取默认Locale 或在 routeMatch 参数定义中查找 "locale"
public function getQueryWithGedmoTranslation(QueryBuilder $qb, string $locale = null, string $defaultLocale = null): Query
新方法 findByQb()
定义
public function findByQb(array $criteria, array $orderBy = [], int $limit = null, int $offset = null, string $alias = null): QueryBuilder;
示例
$admin1sQb = $admin1Repo->findByQb(['country' => $country], ['name' => 'ASC']); $criteria = [ 'orX' => [ [ 'operator' => 'like', 'value' => '%espa%', 'field' => 'name', ], [ 'operator' => 'like', 'value' => '%espa%', 'field' => 'slugName', ], 'andX' => [ [ 'operator' => 'eq', 'value' => '%espa%', 'field' => 'name', ], [ 'operator' => 'isNull', 'field' => 'slugName', ], ], ], [ 'operator' => 'like', 'value' => '%cosas%', 'field' => 'slug', ], ]; $admin1sQb = $admin1Repo->findByQb($criteria);
验证器
NoObjectExist
允许在验证器中使用多个字段UniqueObject
允许在验证器中使用多个字段
Gedmo 性能可翻译
步行者
扩展 GedmoTranslationWalker
以仅执行必要的查询连接
自定义 class_metadata_factory_name ZF3Belcebur\DoctrineORMResources\ORM\Mapping\ClassMetadata
return [ __NAMESPACE__ => [ 'gedmo' => [ 'custom_translation_classes' => [ // 'YourNameSpace\CustomEntityTranslation1', // 'YourNameSpace\CustomEntityTranslation2', // 'YourNameSpace\CustomEntityTranslation3', ] ] ], 'doctrine' => [ 'configuration' => [ 'orm_default' => [ 'class_metadata_factory_name' => ClassMetadataFactory::class, ] ] ] ];
默认配置
namespace ZF3Belcebur\DoctrineORMResources; return [ __NAMESPACE__ => [ 'gedmo' => [ 'custom_translation_classes' => [ // 'YourNameSpace\CustomEntityTranslation' ] ] ], 'service_manager' => [ 'factories' => [ BaseRepository::class => BaseRepositoryFactory::class, ], ], 'doctrine' => [ 'eventmanager' => [ 'orm_default' => [ 'subscribers' => [ TranslatableListener::class, TimestampableListener::class, //SortableListener::class, ], ], ], 'driver' => [ 'translatable_orm_metadata_driver' => [ 'class' => AnnotationORMDriver::class, 'cache' => 'array', 'paths' => [ getcwd() . '/vendor/gedmo/doctrine-extensions/src/Translatable/Entity', ], ], 'orm_default' => [ 'drivers' => [ 'Gedmo\Translatable\Entity' => 'translatable_orm_metadata_driver', ], ], ], 'configuration' => [ 'orm_default' => [ 'class_metadata_factory_name' => ClassMetadataFactory::class, 'repository_factory' => BaseRepository::class, 'types' => [ 'point' => PointType::class, 'carbondate' => CarbonDateType::class, 'carbontime' => CarbonTimeType::class, 'linestring' => LineStringType::class, 'polygon' => PolygonType::class, 'multipolygon' => MultiPolygonType::class, ], 'datetime_functions' => [ 'date' => Date::class, 'date_format' => DateFormat::class, 'dateadd' => DateAdd::class, 'datediff' => DateDiff::class, 'day' => Day::class, 'dayname' => DayName::class, 'last_day' => LastDay::class, 'minute' => Minute::class, 'second' => Second::class, 'strtodate' => StrToDate::class, 'time' => Time::class, 'timestampadd' => TimestampAdd::class, 'timestampdiff' => TimestampDiff::class, 'week' => Week::class, 'weekday' => WeekDay::class, 'year' => Year::class, ], 'numeric_functions' => [ 'acos' => Acos::class, 'asin' => Asin::class, 'atan2' => Atan2::class, 'atan' => Atan::class, 'cos' => Cos::class, 'cot' => Cot::class, 'hour' => Hour::class, 'pi' => Pi::class, 'power' => Power::class, 'quarter' => Quarter::class, 'rand' => Rand::class, 'round' => Round::class, 'sin' => Sin::class, 'std' => Std::class, 'tan' => Tan::class, 'st_contains' => STContains::class, 'contains' => Contains::class, 'st_area' => Area::class, STDistanceSphere::FUNCTION_NAME => STDistanceSphere::class, 'ST_Distance' => STDistance::class, 'GeomFromText' => GeomFromText::class, 'st_intersects' => STIntersects::class, 'st_buffer' => STBuffer::class, 'Point' => Point::class, 'GLength' => GLength::class, 'LineString' => LineString::class, 'LineStringFromWKB' => LineStringFromWKB::class, ], 'string_functions' => [ 'binary' => Binary::class, 'char_length' => CharLength::class, 'concat_ws' => ConcatWs::class, 'countif' => CountIf::class, 'crc32' => Crc32::class, 'degrees' => Degrees::class, 'field' => Field::class, 'find_in_set' => FindInSet::class, 'group_concat' => GroupConcat::class, 'ifelse' => IfElse::class, 'ifnull' => IfNull::class, 'match_against' => MatchAgainst::class, 'md5' => Md5::class, 'month' => Month::class, 'monthname' => MonthName::class, 'nullif' => NullIf::class, 'radians' => Radians::class, 'regexp' => Regexp::class, 'replace' => Replace::class, 'sha1' => Sha1::class, 'sha2' => Sha2::class, 'soundex' => Soundex::class, 'uuid_short' => UuidShort::class, ], ], ], ], ];