文档章节

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

phpy
 phpy
发布于 2014/01/03 09:04
字数 465
阅读 701
收藏 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 不完全学习涂鸦(十四)-- 单元测试一个ZF2应用程序

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

Jacky.Wang
2013/08/23
0
1
菜菜鸟Zend Framework 2 不完全学习涂鸦(五)-- 路由和控制器

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

Jacky.Wang
2013/07/23
0
17
菜菜鸟Zend Framework 2 不完全学习涂鸦(六)-- 数据库和模式

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

Jacky.Wang
2013/07/26
0
5
Zend Framework 2.0的Mvc结构及启动流程分析

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

AlloVince
2012/06/06
949
1
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
21
5
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部