文档章节

zf2中使用service manager的使用方法

webphp
 webphp
发布于 2017/07/26 11:28
字数 516
阅读 6
收藏 0
点赞 0
评论 0

方法1:

在控制层中的controller文件中
//file:/module/User/src/User/Controller/IndexController.php
namespace /User/Controller 
use Zend\Helper\Help;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\ServiceManager\ServiceManager;
use Zend\Stdlib\DispatchableInterface;
class indexController extends AbstractActionController implements DispatchableInterface,ServiceLocatorAwareInterface{
    public funciton indexAction(){
        $serviceManger = new ServiceManager();
        //setService服务注册(Service registration)。ServiceManager::setService 允许你注册一个对象作为服务:
        $serviceManger->setService('helper', new Help());
        $serviceManger->get('helper')->dump( array('title'=>'zf2', 'likes'=>500) );
        //延迟加载的服务对象(Lazy-loaded service objects)
        $serviceManger->setInvokableClass('myhelper', 'Zend\Helper\Help');
        $serviceManger->get('myhelper')->dump( array('title'=>'servicemanager','likes'=>900) );
    }
}

方法2:

    在mondule.php文件中配置,然后在controller文件中调用
file :/module/User/Module.php
namespace User;
use Zend\Helper\Help
class Module{ 
    public function getServiceConfig(){
        return array(
            'factories' => array(
                'User\Model\AlbumTable' => function($sm){
                    $tableGateway = $sm->get('AlbumTableGateway');
                    $table = new AlbumTable($tableGateway);
                    return $table;
                },
                'AlbumTableGateway' => function($sm){
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype( new Album() );
                    return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
                },
            ),
            //延时加载,根据不同的类进行不同选择,在此invokables和service可以任选一个
            'invokables' => array(
                'MyHelper' => 'Zend\Helper\Help',
            ),
            //添加服务
            //'services' => array(
            //    'MyHelper' => new Help(),
            // ),
        );
    }
}
    格式为:
public function getServiceConfig()
    {
        return array(
            'abstract_factories' => array(),
            'aliases' => array(),
            'factories' => array(),
            'invokables' => array(),
            'services' => array(),
            'shared' => array(),
        );
    }
    在Module.php文件中配置完成以后,在controller文件中使用如下
use Zend\Mvc\Controller\AbstractActionController;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceManager;
use Zend\Stdlib\DispatchableInterface;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController implements DispatchableInterface,ServiceLocatorAwareInterface {
    public function indexAction(){
        $this->getServiceLocator()->get('MyHelper')->dump(array('title'=>'baiping','likes'=>1000));
    }
}
如果想在model层中使用service manager中的配置向下:
//file: module/User/src/User/Model/AlbumTable.php

namespace User\Model;
use Zend\Db\TableGateway\TableGateway;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class AlbumTable implements ServiceLocatorAwareInterface {
    protected $tableGateway;
    protected $services;
    public function __construct(TableGateway $tableGateway){
        $this->tableGateway = $tableGateway;
    }

    //ServiceLocatorInterface
    public function setServiceLocator(ServiceLocatorInterface $serviceLocator) {
        $this->services = $serviceLocator;
    }
    public function getServiceLocator() {
        return $this->serviceLocator;
    }
    public function fetchAll(){
        //此处表示可以使用Helper公共库中dump方法
        $this->services->get('MyHelper')->dump(array('title'=>'xinsight', 'likes'=>'109'));
        $resultSet = $this->tableGateway->select();
        return $resultSet;
    }
    public function getAlbum($id){
        $id = (int) $id;
        $rowset = $this->tableGateway->select( array('id'=>$id) );
        $row = $rowset->current();
        if ( !$row ){
            throw new \Exception("Could not find row $id");
        }
        return $row;
    }
    public function saveAlbum(Album $album){
        $data = array(
            'artist' => $album->artist,
            'title'  => $album->title,
        );
        $id = (int) $album->id;
        if ( $id == 0 ){
            $this->tableGateway->insert($data);
        }else{
            if ( $this->getAlbum($id) ){
                $this->tableGateway->update($data, array('id'=>$id));
            }else{
                throw new \Exception('Album id does not exist');
            }
        }
    }
    public function deleteAlbum($id){
        $this->tableGateway->delete( array('id'=>$id) );
    }
}
 

© 著作权归作者所有

共有 人打赏支持
webphp
粉丝 1
博文 91
码字总数 91650
作品 0
海淀
程序员
Zend Framework 2.0的Mvc结构及启动流程分析

原文链接: Zend Framework 2.0的Mvc结构及启动流程分析。 概要 首先需要明确的是,Zend2.0的启动以及MVC构架是完全基于事件驱动的。如果对事件驱动还不太了解的话,应该先弄清楚什么是ZF2的...

AlloVince ⋅ 2012/06/06 ⋅ 1

菜菜鸟Zend Framework 2 不完全学习涂鸦(六)-- 数据库和模式

这几天一直在看这部分的教程,非常纠结的一篇教程,完全不能保证大家都能看懂,所以仅供参考。 数据库(Database)和模型(Models) 一、数据库(Database) 现在我们已经建立了 Album 模块中...

Jacky.Wang ⋅ 2013/07/26 ⋅ 5

Zend Framework 2.0 正式版发布及新功能介绍

著名php开源框架Zend Framework经历了长达数年的开发,终于在2012年9月5日正式发布了2.0版本,下简称ZF2。时隔Zend 1.0版本的发布已经有5年之久。php的框架一直都是百家争鸣的,但是作为php...

今天星期一 ⋅ 2012/09/07 ⋅ 24

zend framework2安装后一直有问题。。。

@Jacky.Wang 你好,想跟你请教个问题:安装后显示Fatal error: Uncaught exception 'ZendServiceManagerExceptionInvalidArgumentException' with message 'Provided abstract factory must ......

山青 ⋅ 2015/02/04 ⋅ 0

【I】ZF2安装 和 创建一个新项目

参看zend文档 : http://framework.zend.com/manual/2.2/en/user-guide 目录 I 安装ZF2 II 安装一个新应用 I 安装 ZF2 在经过下载无效后,还是老实的从手册开始吧:http://framework.zend.c...

暂时想不到好名字 ⋅ 2014/08/07 ⋅ 0

阿债/pram-locator

PramLocator A class loader for PSR-0-style class loading. Same as Symfony Class Loader. 一个用于PHP自动加载的类,作用与Symfony中的Class Loader相同。 在我常用的一些PHP库中测试都没...

阿债 ⋅ 2014/04/08 ⋅ 0

菜菜鸟Zend Framework 2 不完全学习涂鸦(十一)-- Zend 框架工具(ZFT...

Zend 框架工具(ZFTool) 一、概览 ZFTool(下载)是一个维护模块化 ZF2 应用程序的公用模块。它可以在命令行模式下运行也可以安装成 ZF2 模块或者 PHAR(下文有介绍)。这个工具可以让你: ...

Jacky.Wang ⋅ 2013/08/06 ⋅ 1

菜菜鸟Zend Framework 2 不完全学习涂鸦(一)-- 安装配置

声明:本人 PHPer 菜鸟一枚,Zend Framework 2 框架的菜菜鸟,刚学习 ZF2 不过 2 天。由于英语实在太破,所以一开始只能找网上 ZF2 中文教程,但很多教程都只说到 ZF2 安装与配置就结束了,没...

Jacky.Wang ⋅ 2013/07/18 ⋅ 27

菜菜鸟Zend Framework 2 不完全学习涂鸦(二)-- 类库共享

上篇涂鸦介绍了 ZF2 的安装和配置。 这篇涂鸦介绍一下 ZF2 类库文件的共享 上篇涂鸦中介绍的”在线安装“和”手动安装“都是将 ZF2 的类库文件安装在”项目目录/vendor/“(在线安装)或者”...

Jacky.Wang ⋅ 2013/07/18 ⋅ 4

Zend Framework 2 中的EventManager的使用方法

Matthew Weier O'Phinney,资深的PHP工程师。目前在Zend Technologies工作,是Zend Framework的Leader。下面的这篇文章翻译自作者的博客上的一篇文章:Using the ZF2 EventManager。 今年早些...

__小白 ⋅ 2014/04/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部