文档章节

在Zf2中实现Controller按照URL自动注册

phpy
 phpy
发布于 2014/01/03 09:04
字数 465
阅读 702
收藏 4

 在Zf2中,一般的情况下,在modules的的某个模块的controller目录下添加一个controller 文件,对应的需要在module.config.php 中注册。 这样是为了启用灵活,但是当controller 文件特别多的时候,注册controller 的时候就感觉很繁琐,所有添加配置,实现Controller按照URL自动注册。

例如:Application 模块,在其controller目录下有两个controller 文件。如图:


IndexController已经在module.config.php 中注册,而UsersController没有注册。如图:


在UsersController文件中,写一个测试的action :

public function testAutoAction(){
    echo "users";
    die;
}



在浏览器中访问通过正确的URL 访问测试action 时,出现错误。如图:

从错误信息可以看出,UsersController 没有注册。如何解决它,那么就需要注册UsersController了。

 一种方法是在module.config.php 中添加UsersController 的注册信息。

'controllers' => array(
        'invokables' => array(
            'Application\Controller\Index' => 'Application\Controller\IndexController',
            'Application\Controller\Users' => 'Application\Controller\UsersController'
        )
        
    ),



另一种方法是当你不想每添加一个controller时,去注册一次,那么就使用如下的方法。

1、创建一个抽象工厂

//module/Application/src/Application/Services/CommonControlAppAbstractFactory.php
namespace Application\Services;
use Zend\ServiceManager\AbstractFactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class CommonControlAppAbstractFactory implements AbstractFactoryInterface{
    
    
    public function canCreateServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName){
        if(class_exists($requestedName.'Controller')){
            return true;
        }
        return false;
    }
    
    public function createServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName){
        $class = $requestedName.'Controller';
        return new $class;
    }
    
}

2、注册到getControllerConfig()

//module/Application/Module.php
    public function getControllerConfig(){
        return array(
            'abstract_factories'=>array('Application\Services\CommonControlAppAbstractFactory')
        );
    }

再次运行

这样就大功告成了。


References :

1.http://samsonasik.wordpress.com/2012/12/23/zend-framework-2-automatic-controller-invokables-via-abstract-factories/

2.https://packages.zendframework.com/docs/latest/manual/en/index.html







© 著作权归作者所有

共有 人打赏支持
phpy
粉丝 6
博文 14
码字总数 2054
作品 0
广州
高级程序员
私信 提问
加载中

评论(2)

phpy
phpy

引用来自“Fengjian35”的评论

当Route 的规则更改后,会不会出现问题呢?

看你如何去定义Route 规则。
以下是我新定义的Route ,使用了命名空间后,同样运行成功。
'users' => array(
'type' => 'Segment',
'options' => array(
'route' => '/users[/:action]',
'constraints' => array(
'action' => '[a-zA-Z_-]+',
),
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Users',
'action'     => 'index',
),
),
),
Fengjian35
Fengjian35
当Route 的规则更改后,会不会出现问题呢?
菜菜鸟Zend Framework 2 不完全学习涂鸦(五)-- 路由和控制器

路由(Routing)和控制器(Controllers) 我们将建立一个简单的唱片收藏和展示的系统,首页显示唱片列表并允许新建,编辑和删除唱片,以下是必须的页面清单: 页面名称 页面功能说明 首页(H...

Jacky.Wang
2013/07/23
0
17
菜菜鸟Zend Framework 2 不完全学习涂鸦(十四)-- 单元测试一个ZF2应用程序

单元测试一个Zend Framework 2应用程序 在一个大型项目的开发过程中特别是牵涉到许多人员参与时,一个可靠的单元测试是必不可少的。对于应用程序每当有所变化后都返回并手动对每个组件进行测...

Jacky.Wang
2013/08/23
0
1
Zend Framework 2.0的Mvc结构及启动流程分析

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

AlloVince
2012/06/06
1K
1
菜菜鸟Zend Framework 2 不完全学习涂鸦(六)-- 数据库和模式

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

Jacky.Wang
2013/07/26
0
5
Zend Framework2 入门教程

由于篇幅过长使用过QQ空间的自动清理功能,不知道是否被删减有内容。 zend framework2 入门教程源码 http://pan.baidu.com/s/1kTuRGn9 目录 序言 5 第 1章 Zend Framework2 简介 6 1.1 Zend...

lai1362000
2014/02/19
23.6K
8

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部