文档章节

在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 不完全学习涂鸦(十四)-- 单元测试一个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

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
10
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部