前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >thinkphp事件控制器:Event

thinkphp事件控制器:Event

作者头像
PM吃瓜
发布2019-08-12 16:38:38
1.1K0
发布2019-08-12 16:38:38
举报

我们通常所了解的控制器其实是Controller控制器类,而且大多数也是继承了核心的Think\Controller类,由于该类控制器是通过URL访问请求后调用的,因此也称之为访问控制器,事实上,ThinkPHP可以支持更多的控制器分层,多层控制器的定义完全取决于项目的需求,例如我们可以分为业务控制器和事件控制器: > Home\Controller\UserController //用于用户的业务逻辑控制和调度 > Home\Event\UserEvent //用于用户的事件响应操作

├─Controller 访问控制器

├─UserController.class.php

├─Event 事件控制器

  ├─UserEvent.class.php 

一个标准的访问控制器定义如下:

    namespace Home\Controller;
    class UserController extend Think\Controller {
        // 默认操作方法
        public function index(){
            //...
        }
        // 用户注册操作方法
        public function register(){
            //...
        }
    }

注:访问控制器的名称并非一定是Controller,而是通过DEFAULT_C_LAYER设置的,默认设置是Controller。

访问控制器负责外部的交互响应,通过URL请求调用,例如:

    http://serverName/Home/User/index 
    http://serverName/Home/User/register

而事件控制器负责内部的事件响应,并且只能在内部调用,所以是和外部隔离的。

确切的说,所有访问控制器之外的分层控制器都只能内部实例化调用。

    namespace Home\Event;
    class UserEvent {
        // 用户登录事件
        public function login(){
            echo 'login event';
        }
        // 用户登出事件
        public function logout(){
            echo 'logout event';
        }
    }

如果是定义其他的控制器层,则不一定必须要继承系统的Controller类或其子类,通常需要输出模版的时候才需要继承Controller类。

调用多层控制器

访问控制器是通过URL请求调用,访问控制器之外的分层控制器都只能内部调用,调用多层控制器可以通过两种方式:

直接实例化

    namespace Home\Controller;
    class UserController extend Think\Controller {
        // 默认操作方法
        public function index(){
            // 触发事件
            $event = new \Home\Event\UserEvent();
            $event->login();
        }
    }

A函数实例化

    namespace Home\Controller;
    class UserController extend Think\Controller {
        // 默认操作方法
        public function index(){
            // 触发事件
            $event = A('User','Event');
            $event->login();
            // 或者直接使用
            // R('User/login','','Event');
        }
    }

总结:那么Event通常在什么情况下会用到?也就是使用场景?

这个没有人会告诉你,因为没有答案,几乎所有功能你可以全部写在控制器里面。按照官方的说法。在3.2中加入了Event和Logic 是在原有的Action,细化划分三层。具体这三层如何使用,在项目中起到什么作用。由开发者定义。

从根本上, ThinkPHP 框架就是一个目录结构框架。只要符合他们的目录结构就可以。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tech爬虫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 调用多层控制器
    • 直接实例化
      • A函数实例化
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档