小编Dan*_*l M的帖子

Zend Framework 2中Service和Manager类之间的区别

我对这个ManagerService类名后缀感到有些困惑.

据我了解的不同,Managers负责处理(创建,检索,删除......)某些类型的实体.例如,ModuleManager负责加载和返回Modules.在这种情况下,你确实关心实际的实体,Module.

但是,Services是提供接口来执行cetain类型的流程逻辑的类.例如,a LogService将给定的日志消息发送到定义的日志编写器.你不关心它在哪里以及它做了什么,你只是想让管理员了解刚刚发生的事情.

现在,ZF2提供了一个ServiceManager创建并返回给定实例的实例Service.我不小心习惯于创建Managers并提供一个factory,ServiceManager以便您可以在上下文中访问Manager使用,以便保持控制器的微小和可测试类中的真实逻辑.这是令我困惑的部分,因为很明显,不建议使用a 来检索.但是:我不是唯一一个这样做的人:模块是另一个例子:它默认注册为a .$this->getServiceLocator()->get('managerName');ControllerManagersServiceLocatorDoctrine ORMEntityManagerdoctrine.entitymanager.orm_default Service

我是否得到了真正的区别ServicesManagers错误?甚至还有区别吗?是Managers没有可能从继承Services的概念?

php naming-conventions zend-framework2

20
推荐指数
1
解决办法
5563
查看次数

如何检查类是否属于某个命名空间

我想知道PHP是否提供一种本机方式来检查类(实例)是否属于某个命名空间。

其实并不重要,只是为了您的理解,我是如何提出这个问题的:

使用ZF2,我为该onDispatch事件提供了一个事件处理程序。但是,对于任何模块的任何控制器的每次分派,都会调用此处理程序。显然,如果调度模块的控制器,我只想在此处理程序中执行操作。

所以我想检查Controller是否在模块的命名空间中。

顺便说一句,我暂时通过在类名(strpos($className, 'ModuleName\Controller') !== false)上进行字符串比较来解决此问题。我猜想使用substr()strncmp()诸如此类的效果要好于strpos(),但就我而言,这并不重要。

提前致谢!

//编辑:为了清楚起见,我正在寻找类似的东西:

// $foo is an instance of MyApp\Controller\Moo
is_in_namespace('MyApp\Controller', $foo); // true
Run Code Online (Sandbox Code Playgroud)

要么

// $foo is an instance of MyApp\Controller\Moo
get_namespace($foo) === 'MyApp\Controller'; // true
Run Code Online (Sandbox Code Playgroud)

php oop namespaces

6
推荐指数
1
解决办法
969
查看次数

gnupg与php抛出"无法初始化密钥列表"

尝试使用gnupg加密邮件时,方法调用gnupg::keyinfo()会抛出错误could not init keylist.

这是我初始化扩展的方式:

putenv('GPGME_DEBUG=9:./gnupg/debug.log');
putenv('GNUPGHOME=./gnupg/');

$this->gpg = new gnupg();
$this->gpg->seterrormode(gnupg::ERROR_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)

gnupg确实存在的地方(调用is_dir('./gnupg')返回true- 我也尝试了绝对路径而没有成功).

一些其他信息:

  • 使用完全相同的代码PHP-CLI.(但是,我需要使用HTTP)
  • 我正在使用ubuntu网络服务器: Linux name 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 GNU/Linux
  • gnupg版本:gpg --version- >gpg (GnuPG) 1.4.10
  • 基础设施:client - > nginx- > apache- >php 5.3
  • 为了测试,我已经设置了文件权限(递归): drwxrwxrwx 4 www-data web1 4096 29. Nov 12:30 .

debug.log显示以下错误:

_gpgme_io_set_close_notify (fd=0x282): enter: close_handler=0x7f6d2a409780/0x7f6d38edb730
_gpgme_io_set_close_notify (fd=0x282): error: Invalid argument …
Run Code Online (Sandbox Code Playgroud)

php linux gnupg

5
推荐指数
1
解决办法
559
查看次数

PHP&ZF2 /比较:预期==实际

有谁知道为什么一些开发人员(特别是在Zend Framework 2的资源中看到)在比较中的实际值之前写出预期值?

例:

if (true === $actualValue) { ... }
Run Code Online (Sandbox Code Playgroud)

代替

if ($actualValue === true) { ... }
Run Code Online (Sandbox Code Playgroud)

这种情况没有在PSR编码标准中定义.

注意: c ++有一个类似的主题,但没有真正有用的答案.

php comparison coding-style zend-framework2

4
推荐指数
1
解决办法
213
查看次数

从Zend Framework 2中的模块发布资产

通常建议将模块资产存储在模块的目录内,moduleName/public(或者您想要命名资产目录的任何内容).

遗憾的是,Zend Framework 2 默认不支持模块资产的资产发布.根据MWOP,大约1个月前没有任何计划,我猜仍然没有真正的计划(他们可能需要做很多工作才能准备好稳定的版本).(但是,有一天,他们将解决这个问题.)

随着我的ZF2应用程序不断发展壮大,我达到了需要特定模块资产的地步.目前,我将它们保存在模块目录中并将它们复制到应用程序的公共目录中.你可以想象这种方法容易出错且令人筋疲力尽.

你怎么处理这个问题?是否有一个简单的解决方案可以解决这个问题?我的项目计划不允许我自己创建复杂的资产处理.是否有与ZF2兼容的值得推荐的轻量级资产框架?我已经考虑过创建符号链接,但我认为这不是最好的解决方案,因为它需要一些额外的Web服务器配置(FollowSymlinks)和额外的维护工作(应用程序在本地开发并部署在远程服务器上).

提前致谢.

php assets module zend-framework2

3
推荐指数
2
解决办法
3927
查看次数

使用Zend Framework 2中的FormElement ViewHelper渲染自定义表单元素

我已经为一个特殊的,复杂的目的创建了一个新的表单元素类(带有附加按钮的文本输入字段,用于打开"搜索向导"弹出窗口).

为了正确呈现这个元素,我还创建了一个表单视图助手.一切正常,到目前为止还不错.

但是,如果我尝试使用FormCollection视图助手渲染表单,则该元素将呈现为基本输入元素.这是因为FormCollection助手依赖的FormElement视图助手使用硬编码的if子句系列将元素的类型映射到特定的表单视图助手.它无法映射我的元素类,因此可以回归FormInput.

即(取自Zend/Form/View/Helper/FormElement.php,第41-49行):

    if ($element instanceof Element\Button) {
        $helper = $renderer->plugin('form_button');
        return $helper($element);
    }

    if ($element instanceof Element\Captcha) {
        $helper = $renderer->plugin('form_captcha');
        return $helper($element);
    }

    ...

    $helper = $renderer->plugin('form_input');
    return $helper($element);
Run Code Online (Sandbox Code Playgroud)

等等.

我有点卡在这里,因为这种架构并没有真正提升可扩展性.

我想到的唯一解决方案(除了手工渲染表单)是扩展FormElement视图助手类,从而创建我自己的CustomFormElement视图助手.但是,由于其复杂性,我将自定义元素放入自己的模块中.所以我必须动态编写这个CustomFormElement助手来添加来自任何模块的自定义元素.我不认为这是推荐的程序.

还有其他解决方案,或者甚至是我的完整方法未经推荐?提前致谢!

php zend-form viewhelper zend-framework2

3
推荐指数
1
解决办法
6780
查看次数