- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚开始为一个新项目设置一个新的 ZF2 应用程序,基于 ZF2 框架,我正在查看他们在 Models 上的教程。 .
tl;dr:我应该如何在多个不同的模块之间共享一个模型,将它放在更高级别的某个地方(在/module 之外)?
我们有几个模块设置如下:
/
/module/ModuleName
/module/ModuleName/config
/module/ModuleName/src
/module/ModuleName/src/ModuleName
我正要设置一个文件夹 /module/ModuleName/src/ModuleName/Model/TableName.php
,但后来我意识到:该表也需要在其他模块中访问.那我该怎么办呢?
我应该将 Models 文件夹放在 /module/Model
中,还是会导致它被视为一个模块,即 site.com/model(根据我们当前的配置,它会)。
我应该在不同地方复制和粘贴模型吗?我应该把模型放回 /vendor/library/Company/Model
的某个地方吗?不太确定是否有最佳实践!
问题二:教程也建议使用ServiceManager实例化数据库模型,使用同一个实例。如果我有一个包含 5 个 Controller 的模块,每个 Controller 访问完全独立的表(比如每个 4 个表)怎么办?在我看来,它会在每次页面加载时冗余地初始化 16 个表(对于该模块中的其他 Controller )。单个表初始化会增加 55 毫秒的页面加载时间。有没有解决的办法??我不确定如何根据教程初始化 tablegateway 的操作将配置移动到 Controller 的操作?
最佳答案
1)
您可以在您的应用程序中使用来自任何模块的任何模型,因此它们可以“共享”。例如,您使用 ServiceManager 来帮助您获取项目中模型(和其他类)的实例。
服务管理器配置:
'factories' => array(
'AuthService' => function($sm) {
$auth = new \Zend\Authentication\AuthenticationService();
return $auth;
},
'RoleMapper' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$mapper = new \Application\Mapper\RoleMapper;
$mapper->setDbAdapter($dbAdapter);
$mapper->setEntityPrototype(new \Application\Model\Role);
$mapper->setHydrator(new \Application\Model\RoleHydrator);
return $mapper;
},
'UserMapper' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$mapper = new \MyModule\Mapper\UserMapper;
$mapper->setDbAdapter($dbAdapter);
$mapper->setEntityPrototype(new \MyModule\Model\User);
$mapper->setHydrator($sm->get('UserHydrator'));
return $mapper;
},
....
如您所见,您可以在其中定义来自多个模块的类。不过,通常您只需为每个模块定义一个单独的 ServiceManager 配置。
没有什么可以阻止您像这样在应用程序模块中创建“UserMapper”的实例:
一些 Controller :
$this->getServiceLocator()->get('UserMapper');
// Or even grab Zend libraries like this
$this->getServiceLocator()->get('AuthService');
ServiceManager 将允许您从任何其他有问题的模块中获取类的实例。
2)
在您请求之前,服务管理器实际上不会创建任何实例,因此没有您建议的开销。
从上面的例子来看,在你第一次请求之前没有实际创建的实例:
$this->getServiceLocator()->get('UserMapper'); // instance now created.
例如,如果您从未向服务经理询问“RoleMapper”,则不会创建任何实例。
关于php - 模块之间共享的 ZF2 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15083002/
当我像这样使用 zend CLI 创建表单时,会生成一个表单并将其添加到表单文件夹中。 zf create form MyForm 我有一个自定义类,我想以相同的方式为其创建一个自定义命令,并希望查看
我有一个以 user_id 作为主键的用户表和一个以 user_date_id 作为主键的 user_dates 表,user_id 链接到用户表以及 start_date 和 end_date 字段
我得到了这个代码 $select ->from(array("e" => "embarcacoes")) ->join(array("i
我遇到了 PHP 和 Zend Framework 的这个小问题。 我使用 apt-get install libzend-framework-php 安装了 ZF它还安装了二进制 zf.sh和 ze
我有一小段(x86)程序集,我试图弄清楚它的作用。 ... 6: 81 ec 00 01 00 00 sub $0x100, %esp c: 31 c9
我正在将 ZF 用于 MVC 应用程序,并且对我的代码应该如何构建感到非常困惑。 我有一个过程应用程序,它基本上是 1 个巨大的长文件,其中包含我希望我的应用程序执行的所有功能......例如:get
我的身份验证适配器如下所示 $authAdapter->setTableName('register') ->setIdentityColumn('u
我们最近开始使用 Doctrine 2.2 和 Zend Framework 2 的一部分,以努力改进组织、减少重复等。今天,我开始提出实现服务层的想法,以充当我们的 Controller 和 Doc
我是 phpunit 测试的新手。任何人都可以帮助我如何测试图像中下面的行。 到目前为止我的测试是: public function testCanSendEmail() { $formDat
我正在尝试写这个,用 zf select 查询但没有成功 SELECT * FROM `subscribers` WHERE id IN (Select subscriber_id From gs_r
我正在使用 Zend Framework 的 Zend_Db_Table从数据库中获取数据的类。 我想通过向表中添加一些内容来“优化”我从表中获取的每一行。在一个普通的旧 SQL 查询中,我会写例如。
我正在尝试使用 Zend_Db 进行与此类似的更新: UPDATE `TABLE` SET column = column + 'new value' WHERE foo = 'bar' 你们
cmpxchg 的操作伪代码如下(Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 2A: Instructi
我正在使用具有 REST API 的 ZF 开发应用程序。一切都很顺利,除了我的 XML 在开头有一个空白字符,所以 XML 打破了在开头有 XML 声明的规则。我正在尝试使用 javascript/
这段代码是否给了我最后插入的记录 id,即使在重载页面上? db = Zend_Db_Table::getDefaultAdapter(); $db->insert($this->_name,
为什么 lists:zf/2 是 Erlang 中 filtermap/2 的别名? 这是列表中未记录但已导出的函数:模块。这是实现: zf(F, L) -> filtermap(F, L).
我正在 x86 上调试我的代码,问题追溯到 AND 指令如果结果不为零,有时不会清除 ZF 标志。这是有问题的代码: 0257A9F9 mov edx,dword ptr [ecx+
我需要使用一些没有 GCC 内在函数的 x86 指令,例如 BSF 和 BSR。使用 GCC 内联汇编,我可以编写如下内容 __INTRIN_INLINE unsigned char bsf64(un
我在将复选框包装到标签中时遇到了 Zend 装饰器 (ZF1) 的一些问题。 在我的表格中,我有一些非常简单的东西: $remember = new Zend_Form_Element_Checkbo
我有一个简单的查询,但我一辈子也想不通。 我有一个包含“thread_id”和“messages”列的(简化的)“messages”表 我还有一个线程列表,每个线程需要 10 个结果。 $list =
我是一名优秀的程序员,十分优秀!