radnan / rdn-doctrine
Zend Framework 2 Doctrine ORM桥接器
Requires
This package is not auto-updated.
Last update: 2024-09-24 00:15:23 UTC
README
RdnDoctrine ZF2模块是一个连接到Doctrine ORM库的简单桥接器。
如何安装
-
使用
composer
需要radnan/rdn-doctrine
包$ composer require radnan/rdn-doctrine:1.*
-
通过在
application.config.php
文件中包含它来激活模块<?php return array( 'modules' => array( 'RdnDoctrine', // ... ), );
依赖项
本模块依赖于以下模块:RdnConsole、RdnDatabase和RdnFactory。
如何使用
可以使用rdn_entity_managers
配置选项通过RdnDoctrine\EntityManagerManager
服务定位器注册实体管理器。
<?php return array( 'rdn_entity_managers' => array( 'factories' => array(), 'invokables' => array(), ), );
您还可以使用managers
键通过简单的配置选项快速生成实体管理器
<?php return array( 'rdn_entity_managers' => array( 'managers' => array( 'App' => array( /* configuration options */ ), ), ), );
配置实体管理器就这么简单!这里我们已配置了一个名为App
的实体管理器。假设我们的模块名称也是App
,则库将为您设置一些合理的默认值,您都可以覆盖。
默认情况下,管理器将期望您的实体位于App\Entity
命名空间内(或更一般地<MANAGER-NAME>\Entity
)。
控制器插件
一旦配置了实体管理器,您就可以使用entity()
插件从您的控制器中访问实体管理器或实体存储库。
由于您可以使用不同的名称注册多个实体管理器,默认情况下,插件将获取与模块名称相同的实体管理器
namespace App\Controller; use App\Entity; class User { public function createAction() { $user = new Entity\User; $user->setEmail('pot@example.com'); $this->entity()->persist($user); $this->entity()->flush(); } }
为了访问实体存储库,我们调用相同的entity($name)
插件,但这次我们提供了一个实体名称
namespace App\Controller; use App\Entity; class User { public function editAction() { $id = $this->params('user-id'); $user = $this->entity('User')->find($id); /** * Alternatively we can be more explicit and request the * User entity within the App module */ $user = $this->entity('App:User')->find($id); } }
RdnDoctrine\EntityManager\AliasResolver
服务用于在未提供别名时解析别名。例如,如果给出的是User
而不是App:User
。
代码补全
如果您想为此插件添加代码补全,请在您的AbstractController
类中包含以下内容
namespace App\Controller; use Zend\Mvc\Controller\AbstractActionController; /** * @method \Doctrine\ORM\EntityRepository|\Doctrine\ORM\EntityManager entity(\string $name = null) Get the entity manager or a repository for given entity name. */ abstract class AbstractController extends AbstractActionController { }
然后,只需从该抽象控制器扩展您的控制器。
控制台命令
该模块还附带一组控制台命令,用于管理数据库模式和生成代理。
您可以通过运行vendor/bin/console
来运行和控制doctrine:
命名空间中的控制台命令以获取帮助。
共享实体
通常您将有一个模块包含所有常用实体,例如用户实体等。您还将使用与该模块相同的名称为您的应用程序注册单个实体管理器。
然后,您将为您的站点的每个部分创建单独的模块。每个模块都将依赖由通用模块提供的实体,并提供自己的实体。但所有模块都将使用单个共享实体管理器。
假设我们的通用模块名为App
,我们还有一个名为Foo
的模块。在这种情况下,Foo
模块的配置将如下所示
<?php return array( 'rdn_entity_managers' => array( 'managers' => array( 'App' => array( 'table_prefixes' => array( 'Foo' => 'foo__', ), ), ), 'modules' => array( 'Foo' => 'App', ), ), );
这将向App
实体管理器添加由Foo
(在Foo\Entity
命名空间中)提供的实体,并指示所有插件在Foo
模块内使用App
实体管理器。
namespace Foo\Controller; class Bar { public function editAction() { // We can now access the Foo entity repositories $bar = $this->entity('Bar')->find($id); // - OR - more explicitly $bar = $this->entity('Foo:Bar')->find($id); // We can also access the App entity repositories $user = $this->entity('User')->find($id); // - OR - more explicitly $user = $this->entity('App:User')->find($id); // We have access to the shared entity manager $this->entity()->flush(); } }