`
xieye
  • 浏览: 832610 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

phalcon 自定义事件使用的多种方式

    博客分类:
  • PHP
阅读更多
方法1:官方文档的方式。

这是控制器:
    public function indexAction()
    {
        $this->view->disable();
        $eventsManager = new EventsManager();
        $myComponent = new A1();
        $eventsManager->attach('my-component', new SomeListen());
        $myComponent->setEventsManager($eventsManager);
        $myComponent->someTask();
    }

这是组件,
<?php

namespace Learn_phalcon;
use Phalcon\Events\EventsAwareInterface;
use Phalcon\Events\ManagerInterface;


class A1 implements EventsAwareInterface
{
    protected $eventsManager;

    public function setEventsManager(ManagerInterface $eventsManager)
    {
        $this->eventsManager = $eventsManager;
    }

    public function getEventsManager()
    {
        return $this->eventsManager;
    }

    public function getinfo(){
        return "is A1";
    }

    public function someTask()
    {
        $this->eventsManager->fire('my-component:beforeSomeTask', $this);
        echo 'Here, someTask<br>' ;
        $this->eventsManager->fire('my-component:afterSomeTask', $this);
    }
}

下面是监听器
<?php

namespace Learn_phalcon;

use Phalcon\Events\Event;

class SomeListen
{
    public function beforeSomeTask(Event $event, $myComponent)
    {
        echo "Here, beforeSomeTask". $myComponent->getinfo() ."<br>\n";
    }

    public function afterSomeTask(Event $event, $myComponent)
    {
        echo "Here, afterSomeTask". $myComponent->getinfo()."<br>\n" ;
    }
}

最终输出:
Here, beforeSomeTaskis A1
Here, someTask
Here, afterSomeTaskis A1


第2种方式,构造方法自定义:

监听器不变,控制器如下
public function index2Action()
    {
        $this->view->disable();
        $myComponent = new A2();
        $myComponent->someTask();
    }
组件A2.php如下:

<?php

namespace Learn_phalcon;
use Phalcon\Events\EventsAwareInterface;
use Phalcon\Events\ManagerInterface;
use Phalcon\Events\Manager as EventsManager;


/*
* 此类本身包含
*
*/
class A2 implements EventsAwareInterface
{
    public function __construct()
    {
        $eventsManager = new EventsManager();
        $eventsManager->attach('my-component', new SomeListen());
        $this->setEventsManager($eventsManager);
    }

    protected $eventsManager;

    public function setEventsManager(ManagerInterface $eventsManager)
    {
        $this->eventsManager = $eventsManager;
    }

    public function getinfo(){
        return "is A2";
    }

    public function getEventsManager()
    {
        return $this->eventsManager;
    }

    public function someTask()
    {
        $this->eventsManager->fire('my-component:beforeSomeTask', $this);
        echo 'A2 is Here, someTask<br>\n';
        $this->eventsManager->fire('my-component:afterSomeTask', $this);
    }
}

效果如下:
Here, beforeSomeTaskis A2
A2 is Here, someTask
\nHere, afterSomeTaskis A2

第3种方式,自定义容器方式:

监听器不变,控制器如下:
public function index3Action()
    {
        $this->view->disable();
        $myComponent = $this->getDi()->get('my_a3');
        $myComponent->someTask();
    }

组件和A1一样,只是类名改成A3:
此外,添加容器。 在项目初始化时。

$di->setShared('my_a3', function()use($di) {
    $a3 = new \Learn_phalcon\A3();
    $eventManager = new EventsManager();
    $eventManager->attach('my-component:beforeSomeTask' , new \Learn_phalcon\SomeListen() );
    $eventManager->attach('my-component:afterSomeTask' , new \Learn_phalcon\SomeListen() );
    $a3->setEventsManager($eventManager);
    return $a3;
});

效果如下:
Here, beforeSomeTaskis A3
A3 is Here, someTask
\nHere, afterSomeTaskis A3

总结
使用事件花样繁多,总有一款适合你。

另外,方式1 虽然最啰嗦,但有一个大好处,就是监听器可以获取当前运行环境的变量,放自己构造方法里。

而方式2 ,方式3,是预先定义的,于是没法写参数了。于是监听器就不好处理了。
只能放到组件里,可是这样,就有点耦合了。








0
0
分享到:
评论

相关推荐

    phalcon 中文文档 全中文手册

    8. **事件系统与中间件**:Phalcon的事件系统允许在特定操作前或后触发回调函数,而中间件则提供了一种处理HTTP请求的层叠方式。这两部分将解释如何利用这些特性增强应用的功能和安全性。 9. **命令行工具**:...

    phalcon 中文chm文档

    10. **事件管理(Events)**:Phalcon的事件管理系统允许开发者监听和响应框架内部或自定义的事件,实现行为的插件化和扩展。 11. **日志(Logging)**:Phalcon提供了简单的日志接口,可以记录应用程序中的各种...

    Phalcon 2.0.10 文档 html中文版

    5. 缓存支持:Phalcon提供了多种缓存策略,包括文件、内存(如APC和Memcached)以及数据库级别的缓存,有助于提升应用性能。 6. 数据库抽象层和查询构建器:Phalcon的数据库组件提供了面向对象的API,方便进行...

    Phalcon 3.0.0 中文文档

    作为一款全栈框架,Phalcon提供了一系列组件,涵盖了从路由、数据库交互到视图渲染等多个方面,使得开发者能够以更简洁、高效的方式编写代码。 一、Phalcon的特性与优势 1. C语言扩展:Phalcon是用C语言编写的,并...

    高性能PHP框架 Phalcon.zip

    这使得开发者可以使用面向对象的方式来操作数据库。 4. **缓存机制**:框架内建了多种缓存策略,包括文件、内存(如APCu或Memcached)和数据库,以提高数据读取速度。 5. **安全特性**:Phalcon提供了安全相关的...

    phalcon,一个c编写的php扩展型框架

    4. **数据库访问对象(ORM)**:Phalcon的ORM(对象关系映射)允许开发者以面向对象的方式操作数据库,支持多种数据库系统,如MySQL、PostgreSQL和SQLite等,并提供了强大的查询构造器和关系映射功能。 5. **视图...

    phalcon框架文档(官方完整版)

    它支持多种数据库系统,如MySQL、PostgreSQL和SQLite等,允许开发者使用面向对象的方式进行数据操作。 5. **路由** 路由是Phalcon中的关键部分,用于将HTTP请求映射到相应的控制器和动作。框架提供了一种灵活的...

    Phalcon PHP Framework Documentation Release 2.0.7英文原版文档

    在 Phalcon 的文档中,我们首先看到对框架的介绍,包括它的架构、设计哲学和基本的使用方式。文档详细地解释了如何安装 Phalcon PHP 框架,并通过一系列教程来帮助开发者理解 Phalcon 的核心功能。 教程部分从基础...

    PHP实例开发源码-Phalcon PHP开发框架.zip

    4. **事件系统**:Phalcon的事件管理器允许开发者在框架的关键操作点插入自定义代码,实现如日志记录、权限验证等功能,遵循面向切面编程(AOP)理念。 5. **安全机制**:框架内置了防止SQL注入、XSS攻击等的安全...

    phalcon api 开发手册

    Phalcon API 开发手册是专为开发者设计的一份详尽指南,主要针对使用Phalcon框架进行API开发。Phalcon是一个高性能、全栈的PHP框架,它以C扩展的形式实现,为PHP开发者提供了卓越的性能和丰富的功能。这份手册旨在...

    Phalcon Debugbar一个无侵入的Phalcon Framework应用调试/分析工具条

    9. **兼容性**:Phalcon Debugbar与多种浏览器兼容,包括Chrome、Firefox等,确保在各种环境下都能正常工作。 安装与使用Phalcon Debugbar的步骤如下: 1. **获取源码**:从GitHub或其他源获取phalcon-debugbar的...

    基于PHP的PhalconPHP开发框架源码.zip

    9. **视图系统**:PhalconPHP的视图组件支持模板引擎,允许开发者使用单独的文件来处理每个页面的展示部分。 10. **命令行工具**:PhalconPHP提供了CLI工具,用于生成模型、控制器、迁移等,加速开发过程。 11. **...

    suggester:Phalcon 中的简单 suggerster

    通过阅读代码,你可以学习到 Phalcon 如何集成自定义组件,以及如何使用 JavaScript 实现前端交互。此外,还可以通过运行测试用例来确保组件的功能正确性。 总的来说,这个 Phalcon 简单建议器是一个学习 Phalcon ...

    hummingbird-cms:使用PHP Phalcon 4和UIkit 3构建的cms

    基于Phalcon v4和UIKit v3的CMS 要求 Nginx的 PHP&gt; = 7.2 MySQL的&gt; = 5.7.9 菲尔康&gt; = 4.1.0 PHP ZIP扩展 (套接字应用程序的可选) 包括 核心功能 多种语言 通用内容管理器 自订栏位 选单 小部件 外挂程式 ...

    Phalcon_Tests:测试框架PhanconPHP

    10. **事件管理(Events Manager)**:Phalcon的事件系统允许在框架组件之间进行交互和插件扩展。测试会确保事件触发和响应的正确性。 通过Phalcon_Tests-main中的测试用例,开发者和贡献者可以确保对PhalconPHP...

    thunderhawk:Phalcon 2 CMS

    3. **事件系统**:Phalcon 2支持事件驱动编程,允许开发者在特定的代码执行点插入自定义行为,如模型操作前后触发的事件。 4. **安全特性**:内置的安全组件,如SQL防止注入、XSS防御,提高了应用的安全性。 5. **...

    phalcon-syntax

    文件列表中的"phalcon-syntax-master"很可能是一个Git仓库的主分支名,通常包含主题的所有源文件,如`syntax.css`(定义语法高亮的颜色规则)、`package.json`(描述主题信息和依赖)、`README.md`(提供主题的使用...

    php中的orm

    9. 自定义行为和事件监听 10. ORM与原生SQL的混合使用场景 了解和掌握PHP中的ORM技术,对于提升PHP Web开发的效率和代码质量有着显著的帮助。通过阅读这篇博客,开发者可以学习到如何更好地利用ORM进行数据库操作,...

    cphalcon.tar

    4. 缓存管理:为了进一步提升性能,Cphalcon提供了缓存模块,如Phalcon\Cache,支持文件、内存(如APC、Memcached、Redis)等多种缓存后端,方便开发者对数据进行高速缓存。 5. 安全性:Cphalcon包含了一系列安全...

    基于PHP的稻草人PHP系统源码.zip

    PHP提供了错误报告级别设置和异常处理功能,同时开发者可能会自定义错误处理函数或使用第三方库记录日志。 8. 部署与性能优化: 部署时,可能涉及Apache或Nginx服务器配置、PHP版本选择、缓存机制(如OPcache或...

Global site tag (gtag.js) - Google Analytics