ZF2 从模块加载服务配置

2024-01-02

我仍在努力从 Zend Framework 之外的 ZF2 模块(在空白的 .php 中)实例化服务。

我想实现:

通过使用 ServiceManager 和可能的 DI,从 ZF 外部实例化并调用 ZF2 服务方法。

我现在拥有的: (2013 年 4 月 10 日更新)

根据下面的评论,我做了更多的研究,特别是:

  • 快速指南
    http://framework.zend.com/manual/2.0/en/modules/zend.service-manager.quick-start.html http://framework.zend.com/manual/2.0/en/modules/zend.service-manager.quick-start.html
  • RTD(数据库和模型)http:
    //zf2.readthedocs.org/en/latest/user-guide/database-and-models.html
  • 模块演示(非常有帮助)http://www.youtube.com/watch?v=Vp7y65rnN98#t=1200 http://www.youtube.com/watch?v=Vp7y65rnN98#t=1200
  • github 上的模块源代码 - https://github.com/juriansluiman/SlmMail

我选择删除所有 DI 和 ModuleManager 的内容,并尝试自动加载(现在工作正常)并实例化(不)服务。

1 - 使用 Classmap 自动加载请求的类并在独立的 .PHP 文件中实例化 servicemanager

// Autoload ZF and ProductImage module via classmap
Zend\Loader\AutoloaderFactory::factory(array(
        'Zend\Loader\StandardAutoloader'   => array(
            'autoregister_zf' => TRUE,
        ),
        'Zend\Loader\ClassMapAutoloader'   => array(
            '/home/frequency/domains/scrftcdn/public_html/ft/shop/php/zendframework/module/ProductImage/autoload_classmap.php',
        )
    )
)

// Hard-coded servicemanager configuration (will come from $module->getConfig once this works)
$smc = new \Zend\ServiceManager\Config(
    array(
        'service_manager' => array(
            'factories'       => array(
                'ProductImage\Model\ProductImage'   => 'ProductImage\Factory\ProductImageFactory',

            )
        ),
    )
);

// Instantiate the service manager
$sm = new \Zend\ServiceManager\ServiceManager($smc);

//Load the service via the service manager
$service = $sm->get('ProductImage\Model\ProductImage'); // <throws exception
die();

2 - 例外情况

 [error] [client 192.168.6.52] PHP Fatal error: 
 Uncaught exception 'Zend\\ServiceManager\\Exception\\ServiceNotFoundException' with message 'Zend\\ServiceManager\\ServiceManager::get was unable to fetch or create an instance for ProductImage\\Model\\ProductImage' in /usr/lib/zendframework/library/Zend/ServiceManager/ServiceManager.php:495
Stack trace:\n#0 /home/frequency/domains/wpfreqad/public_html/wp-content/themes/frequency/manage-product-images/functions.inc.php(48): Zend\\ServiceManager\\ServiceManager->get('ProductImage\\Mo...')
    #1 /home/frequency/domains/wpfreqad/public_html/wp-content/themes/frequency/functions.inc.php(14): require_once('/home/frequency...')\n
    #2 /home/frequency/domains/wpfreqad/public_html/wp-content/themes/frequency/functions.php(14): require_once('/home/frequency...')\n
    #3 /home/frequency/domains/wpfreqad/public_html/wp-settings.php(293): include('/home/frequency...')\n
    #4 /home/frequency/domains/wpfreqad/public_html/wp-config.php(90): require_once('/home/frequency...')\n
    #5 /home/frequency/domains/wpfreqad/public_html/wp-load.php(29): require_onc in /usr/lib/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 495

3 - ProductImage\autoload_classmap.php

    <?php
    // Generated by ZF2's ./bin/classmap_generator.php
    return array(
        'ProductImageTest\Service\ProductImageServiceTest'         => __DIR__ . '/test/ProductImageTest/Service/ProductImageServiceTest.php',
        'ProductImage\Module'    => __DIR__ . '/Module.php',
        'ProductImage\Factory\ProductImageFactory'                => __DIR__ . '/src/ProductImage/Factory/ProductImageFactory.php',
        'ProductImage\Model\ProductImage'                          => __DIR__ . '/src/ProductImage/Model/ProductImage.php',

    );

4 - 产品图像\Module.php

class Module implements \Zend\ModuleManager\Feature\ConfigProviderInterface
{
    /* Invoked by Module Manager */
    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }
}

5 - ProductImage\config\module.config.php

<?php
return array(
    'service_manager' => array(
        'factories'  => array(
            'ProductImage\Model\ProductImage'           =>  'ProductImage\Factory\ProductImageFactory',
        ),
    ),
);

我希望这是正确的方法,并且不会偏离正确的道路太远。


我终于找到了解决方案。 Jurian 关于使用实际应用程序的提示让我走上了正轨! :)

1 - /zendframework/config/application.config.php。

一切都是默认的,只需确保添加了模块即可。我评论了“应用程序”模块,因为我没有看到它有任何用处(截至目前)。我还必须更改配置文件的路径'./module' to __DIR__ . '../module'因为它在错误的目录中查找(我花了一段时间才找到那个目录)。

<?php
return array(
   // ...
 'modules' => array(
        'ProductImage', /* ProductImage module */
//        'Application',
    ),
// ...
'module_listener_options' => array(
    'module_paths' => array(
        __DIR__ . '/../module',
        __DIR__ . '/../vendor',
    ),

2-配置

确保模块配置正确,并且 ZF2 路径设置正确。就我而言,请完成 RTD 的快速入门(http://zf2.readthedocs.org/en/latest/ref/installation.html http://zf2.readthedocs.org/en/latest/ref/installation.html)。我有ZF2_PATH异常并更改httpd.conf通过WHM。

3 - 了解有关 RTD 的更多信息

特别是关于如何引导应用程序:http://zf2.readthedocs.org/en/latest/modules/zend.mvc.intro.html#zend-mvc-intro http://zf2.readthedocs.org/en/latest/modules/zend.mvc.intro.html#zend-mvc-intro

经过很少的调试后,我生成了以下代码来访问配置良好的 $sm 实例。

//wherever the ZF2 application skeleton is, include the autoloader
require_once '/home/path/to/the/ZF2/application/directory/init_autoloader.php';

use Zend\Loader\AutoloaderFactory;
use Zend\Mvc\Application;
use Zend\Mvc\Service\ServiceManagerConfig;
use Zend\ServiceManager\ServiceManager;

// setup autoloader
AutoloaderFactory::factory();

// get application stack configuration
$configuration = include '/home/path/to/the/ZF2/application/directory/config/application.config.php';

//var_export($configuration);
// The init() method does something very similar with the previous example.
$app = Application::init($configuration);
$sm = $app->getServiceManager();
$pi =  $sm->get('ProductImage\Service\ProductImageService');
var_export($pi);
die();

我不喜欢除了 init_autoloader 路径之外还需要指定配置的事实。我避免将此实现复制并粘贴到各处,我正在考虑集成$sm实例化到init_autoloader.php以便将来每次运行时都不必指定配置文件的路径ProductImage需要调用服务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZF2 从模块加载服务配置 的相关文章

随机推荐

  • 段落换行后有空格

    我使用浅黄色框在 HTML 页面上显示编程内容 类似于这一页 http api rubyonrails org classes ActionView Helpers UrlHelper html method i link to 为了制作一
  • Flex 正则表达式 到 Java 正则表达式

    最近 我正在寻求帮助 以使用 Flex 中的 RegEx 提取 URL 的某些模式 很少有人好心地帮助我完成它 See this https stackoverflow com questions 7358756 how to extrac
  • 将 MongoDb _id 从字符串更改为 ObjectId

    我们的文档最初是使用 id 的 StringObjectIdGenerator 类型存储的 较新的数据将使用默认的 ObjectIdGenerator 保存 我们希望能够通过将 id 转换为新的数据类型来迁移现有数据 这可能吗 是的 可以更
  • 如何使用 Python 对不同前缀同时运行 AWS S3 同步命令

    我正在尝试编写一个 python 脚本 它使用 subprocess 模块将文件从一个 s3 存储桶复制到另一个 但是 为了提高性能 我尝试并行运行具有不同前缀的单独同步命令 到目前为止我所尝试的脚本没有终止 并且我不确定子进程是否同时运行
  • 推断类型相等的 if 和 else 的约束

    我正在尝试填补以下代码片段中的漏洞 import Data Proxy import GHC TypeLits import Data Type Equality import Data Type Bool import Unsafe Co
  • 如何在 Java 中使用正则表达式模式匹配字符串的结尾?

    我想要一个与字符串末尾匹配的正则表达式模式 我正在实现一种词干算法 该算法将删除单词的后缀 例如 对于单词 Developers 它应该与 s 匹配 我可以使用以下代码来做到这一点 Pattern p Pattern compile s M
  • 代码分析 CA1060 修复

    我的应用程序中有以下代码 DllImport user32 dll private static extern int GetWindowLong IntPtr hwnd int index DllImport user32 dll pri
  • 按两个数字对列名进行排序

    我最近得到了这个惊人的答案 https stackoverflow com a 72141622 8071608来自 JBGruber 用于对具有双数值的字符串列进行排序 这适用于帖子底部的两个数据集 library magrittr or
  • Rails——创造再创造!方法,FoR 3 教程

    所以我知道 bang 感叹号 和非 bang 方法之间的区别通常是该方法是否会修改对象本身或返回一个单独的修改对象而保持原始对象不变 然后 在本书第 6 章构建用户模型时 我遇到了User create方法 该方法创建一个新模型并将其保存到
  • 从谷歌选择器选择文件后立即下载文件

    我只是想实现 Google Drive Picker API 以便下载用户通过 Google Drive Picker 提交的文件 在后台 我使用了 Google 选择器 效果很好 但后来我无法下载该文件 首先从单个文件开始 这是我的代码
  • 为什么径向树布局绘图算法会产生交叉边?

    根据 Andy Pavlo 先生的出版物 我正在实施径向布局绘图算法 第18页 问题是 我的结果包含交叉边 这是令人无法接受的 我找到了一些解决方案 类似的问题link https stackoverflow com questions 3
  • Koa.js - 提供静态文件和 REST API

    我是 koa js 库的新手 我需要一些帮助 我正在尝试使用 koa 制作简单的 REST 应用程序 我有一个静态 html 和 javascript 文件 我想在路线上提供服务 和 REST API 访问 api 这是我的项目目录树 pr
  • 启动 Windows 服务并启动 cmd

    我是否需要启用交互式桌面才能工作 启动 EXE 或 cmd 窗口的正确代码是什么 即使我已启用该服务与桌面交互 我仍然无法启动该服务 我将使用聊天引擎 这样作为 Windows 服务更容易管理 我的代码有什么问题吗 using System
  • 调试发布构建类型而不生成签名的 APK

    我有一个具有两种构建类型的项目设置 debug and release 在我的应用程序模块中 我有三个不同的目录 debug release and main 我想做的是测试中的代码release目录 但我似乎能做到这一点的唯一方法是生成一
  • Android ContentProvider openFile:需要提供“修改后的”文件

    我想通过以下方式提供保存在 外部存储 上的图像文件ContentProvider 这些图像文件被 破坏 前 50 个字节与某个任意值进行异或 我想在里面做 demangle ContentProvider以便其他应用程序不需要做特殊处理 我
  • 在 Chrome 中引用页内 SVG

    对某人来说很有趣的问题 我正在尝试使用以下标记将 SVG 过滤器应用于页面中加载的图像 img src http upload wikimedia org wikipedia commons thumb 6 6b Bitmap VS SVG
  • Django 通用外键 - 考虑到 SQL 性能是好是坏?

    我有一个模型A其中包含一个通用外键关系 限制对 3 个其他模型的选择 将它们视为B C and D 在同一个应用程序中 我知道我们无法使用通用外键的局限性filter or get或任何其他查询集操作 所以为了实现这样的目标 A objec
  • iTunes 中 iPhone 应用程序支持的语言列表由什么控制?

    是什么控制着 iPhone 应用程序的 iTunes 页面 右侧 描述 下方 语言 下 显示的受支持语言 从 iTunes Connect 开发者指南来看 这似乎不是您在提交过程中选择的内容 我认为这是捆绑包中的东西 我利用一次技术支持事件
  • 按列值的 LIKE 分组

    给定一个假设的查询 如下所示 SELECT COUNT FROM subscriptions GROUP by plan type 还有一张类似于下面的表格 id plan type customer id 1 gold 2017 523
  • ZF2 从模块加载服务配置

    我仍在努力从 Zend Framework 之外的 ZF2 模块 在空白的 php 中 实例化服务 我想实现 通过使用 ServiceManager 和可能的 DI 从 ZF 外部实例化并调用 ZF2 服务方法 我现在拥有的 2013 年