Rumah php教程 php手册 Zend Framework 2.0事件管理器(The EventManager)入门教程

Zend Framework 2.0事件管理器(The EventManager)入门教程

Jun 06, 2016 pm 08:19 PM
framework zend pengurus acara

这篇文章主要介绍了Zend Framework 2.0事件管理器(The EventManager)入门教程,本文包含快速入门例子、EventManager的选项和方法等,需要的朋友可以参考下

概述

EventManger是一个为以下使用情况设计的组件:

复制代码 代码如下:


实现简单的主题/观察者模式
实现面向切面的设计
实现事件驱动的架构


基本的架构允许你添加和解除指定事件的侦听器,无论是在一个实例基础还是一个共享的集合;触发事件;终止侦听器的执行。

快速入门

通常,你将会在一个类中创建一个EventManager。

复制代码 代码如下:


use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface;
 
class Foo implements EventManagerAwareInterface
{
    protected $events;
 
    public function setEventManager(EventManagerInterface $events)
    {
        $events->setIdentifiers(array(
            __CLASS__,
            get_called_class(),
        ));
        $this->events = $events;
        return $this;
    }
 
    public function getEventManager()
    {
        if (null === $this->events) {
            $this->setEventManager(new EventManager());
        }
        return $this->events;
    }
}

上面的代码允许用户访问EventManager实例,或使用一个新的实例重置它;如果不存在,它将会在被用到的时候惰性实例化。

EventManager仅仅对它是否触发了一些事件感兴趣。基础的触发接受三个参数:事件的名字,它通常是当前的函数/方法名;上下文,它通常是当前的对象的实例;和参数,它通常是提供给当前函数/方法的参数。

复制代码 代码如下:


class Foo
{
    // ... assume events definition from above
 
    public function bar($baz, $bat = null)
    {
        $params = compact('baz', 'bat');
        $this->getEventManager()->trigger(__FUNCTION__, $this, $params);
    }
}

按顺序,触发事件仅关心否有一些东西侦听了事件。侦听器添加到EventManager,,指定一个指定的事件和要通知的回调。回调接受一个Event对象,它有一个用于获取事件名字,上下文和参数的访问器。让我们添加一个侦听器,并且触发事件。

复制代码 代码如下:


use Zend\Log\Factory as LogFactory;
 
$log = LogFactory($someConfig);
$foo = new Foo();
$foo->getEventManager()->attach('bar', function ($e) use ($log) {
    $event  = $e->getName();
    $target = get_class($e->getTarget());
    $params = json_encode($e->getParams());
 
    $log->info(sprintf(
        '%s called on %s, using params %s',
        $event,
        $target,
        $params
    ));
});
 
// Results in log message:
$foo->bar('baz', 'bat');
// reading: bar called on Foo, using params {"baz" : "baz", "bat" : "bat"}"

注意,attach()的第二个参数是一个任何有效的回调;例子中展示了一个匿名函数来保持例子是自包含的。然而,你同样可以使用一个有效的函数名字,一个函数对象,一个引用静态方法的字符串,或一个带有一个指定静态方法或实例方法的回调数组。再一次,任何PHP回调都是有效的。

有时候你可能想要指定一个侦听器没有一个创建了一个EventManager的类的对象实例。Zend Framework通过一个SharedEventCollection的概念来实现它。简单的说,你可以使用一个众所周知的SharedEventCollection来注入一个独立的EventManager实例,并且EventManager实例将会为附加的侦听器来查询它。添加到SharedEventCollection的侦听器与正常的事件管理器大略相同;调用attach与EventManager完全相同,但是在开始需要一个附加的参数:一个指定的实例。还记得创建一个EventManager的实例,我们是如何传递给他__CLASS__的?在使用一个SharedEventCollection时,那个值,或者任何你提供给构造器的数组中的任何字符串,可能用于识别一个实例。作为一个示例,假设我们有一个SharedEventManager实例我们知道已经被注入到我们的EventManager实例中了(对于实例,通过依赖注入),我们可以更改上面的例子来通过共享集合来添加:

复制代码 代码如下:


use Zend\Log\Factory as LogFactory;
 
// Assume $events is a Zend\EventManager\SharedEventManager instance
 
$log = LogFactory($someConfig);
$events->attach('Foo', 'bar', function ($e) use ($log) {
    $event  = $e->getName();
    $target = get_class($e->getTarget());
    $params = json_encode($e->getParams());
 
    $log->info(sprintf(
        '%s called on %s, using params %s',
        $event,
        $target,
        $params
    ));
});
 
// Later, instantiate Foo:
$foo = new Foo();
$foo->getEventManager()->setSharedEventCollection($events);
 
// And we can still trigger the above event:
$foo->bar('baz', 'bat');
// results in log message:
// bar called on Foo, using params {"baz" : "baz", "bat" : "bat"}"

注意:StaticEventManager

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Isu Pemasangan Rangka Kerja Microsoft NET Kod Ralat 0x800c0006 Betulkan Isu Pemasangan Rangka Kerja Microsoft NET Kod Ralat 0x800c0006 Betulkan May 05, 2023 pm 04:01 PM

.NET Framework 4 diperlukan oleh pembangun dan pengguna akhir untuk menjalankan versi terkini aplikasi pada Windows. Walau bagaimanapun, semasa memuat turun dan memasang .NET Framework 4, ramai pengguna mengadu bahawa pemasang berhenti di tengah jalan, memaparkan mesej ralat berikut - " .NET Framework 4 belum dipasang kerana Muat turun gagal dengan kod ralat 0x800c0006 ". Jika anda juga mengalaminya semasa memasang .NETFramework4 pada peranti anda maka anda berada di tempat yang betul

Bagaimana untuk mengenal pasti isu peningkatan Windows menggunakan SetupDiag pada Windows 11/10 Bagaimana untuk mengenal pasti isu peningkatan Windows menggunakan SetupDiag pada Windows 11/10 Apr 17, 2023 am 10:07 AM

Setiap kali PC Windows 11 atau Windows 10 anda mempunyai masalah naik taraf atau kemas kini, anda biasanya akan melihat kod ralat yang menunjukkan sebab sebenar di sebalik kegagalan. Walau bagaimanapun, kadangkala kekeliruan boleh timbul apabila peningkatan atau kemas kini gagal tanpa kod ralat dipaparkan. Dengan kod ralat yang berguna, anda tahu dengan tepat di mana masalahnya supaya anda boleh cuba membetulkannya. Tetapi kerana tiada kod ralat muncul, ia menjadi mencabar untuk mengenal pasti isu dan menyelesaikannya. Ini akan mengambil banyak masa anda untuk mengetahui sebab di sebalik ralat. Dalam kes ini, anda boleh cuba menggunakan alat khusus yang dipanggil SetupDiag yang disediakan oleh Microsoft yang membantu anda mengenal pasti dengan mudah sebab sebenar di sebalik ralat.

SCNotification telah berhenti berfungsi [5 langkah untuk membetulkannya] SCNotification telah berhenti berfungsi [5 langkah untuk membetulkannya] May 17, 2023 pm 09:35 PM

Sebagai pengguna Windows, anda mungkin akan menghadapi ralat SCNotification telah berhenti berfungsi setiap kali anda memulakan komputer anda. SCNotification.exe ialah fail pemberitahuan sistem Microsoft yang ranap setiap kali anda memulakan PC anda kerana ralat kebenaran dan kegagalan rangkaian. Ralat ini juga dikenali dengan nama acaranya yang bermasalah. Jadi anda mungkin tidak melihat ini sebagai SCNotification telah berhenti berfungsi, tetapi sebagai pepijat clr20r3. Dalam artikel ini, kami akan meneroka semua langkah yang anda perlu ambil untuk membetulkan SNotification telah berhenti berfungsi supaya ia tidak mengganggu anda lagi. Apakah itu SNotification.e

Microsoft .NET Framework 4.5.2, 4.6 dan 4.6.1 akan menamatkan sokongan pada April 2022 Microsoft .NET Framework 4.5.2, 4.6 dan 4.6.1 akan menamatkan sokongan pada April 2022 Apr 17, 2023 pm 02:25 PM

Pengguna Microsoft Windows yang telah memasang Microsoft.NET versi 4.5.2, 4.6 atau 4.6.1 mesti memasang versi Microsoft Framework yang lebih baharu jika mereka mahu Microsoft menyokong rangka kerja melalui kemas kini produk masa hadapan. Menurut Microsoft, ketiga-tiga rangka kerja akan menghentikan sokongan pada 26 April 2022. Selepas tarikh sokongan tamat, produk tidak akan menerima "pembetulan keselamatan atau sokongan teknikal." Kebanyakan peranti rumah sentiasa dikemas kini melalui kemas kini Windows. Peranti ini sudah mempunyai versi rangka kerja yang lebih baharu yang dipasang, seperti .NET Framework 4.8. Peranti yang tidak mengemas kini secara automatik boleh

KB5012643 untuk Windows 11 memecahkan apl .NET Framework 3.5 KB5012643 untuk Windows 11 memecahkan apl .NET Framework 3.5 May 09, 2023 pm 01:07 PM

Sudah seminggu sejak kita bercakap tentang pepijat mod selamat baharu yang menjejaskan pengguna yang memasang KB5012643 untuk Windows 11. Isu menjengkelkan ini tidak muncul dalam senarai isu yang diketahui yang disiarkan oleh Microsoft pada hari pelancaran, lantas mengejutkan semua orang. Nah, apabila anda fikir keadaan tidak akan menjadi lebih buruk, Microsoft menjatuhkan bom lain untuk pengguna yang telah memasang kemas kini kumulatif ini. Windows 11 Build 22000.652 menyebabkan lebih banyak masalah Jadi syarikat teknologi memberi amaran kepada pengguna Windows 11 bahawa mereka mungkin mengalami masalah melancarkan dan menggunakan beberapa aplikasi .NET Framework 3.5. Bunyi biasa? Tapi tolong jangan terkejut

Rangka Kerja Pelaksanaan PHP: Tutorial Permulaan Rangka Kerja Zend Rangka Kerja Pelaksanaan PHP: Tutorial Permulaan Rangka Kerja Zend Jun 19, 2023 am 08:09 AM

Rangka kerja pelaksanaan PHP: Tutorial pengenalan ZendFramework ZendFramework ialah rangka kerja tapak web sumber terbuka yang dibangunkan oleh PHP dan kini diselenggara oleh ZendTechnologies menggunakan corak reka bentuk MVC dan menyediakan satu siri perpustakaan kod boleh guna semula untuk melaksanakan aplikasi Web2.0 dan Web Serve. ZendFramework sangat popular dan dihormati oleh pembangun PHP dan mempunyai pelbagai jenis

Cara menggunakan ACL (Senarai Kawalan Akses) untuk kawalan kebenaran dalam Rangka Kerja Zend Cara menggunakan ACL (Senarai Kawalan Akses) untuk kawalan kebenaran dalam Rangka Kerja Zend Jul 29, 2023 am 09:24 AM

Cara menggunakan ACL (AccessControlList) untuk kawalan kebenaran dalam Rangka Kerja Zend Pengenalan: Dalam aplikasi web, kawalan kebenaran ialah fungsi penting. Ia memastikan bahawa pengguna hanya boleh mengakses halaman dan ciri yang dibenarkan untuk mereka akses dan menghalang akses yang tidak dibenarkan. Rangka kerja Zend menyediakan cara yang mudah untuk melaksanakan kawalan kebenaran, menggunakan komponen ACL (AccessControlList). Artikel ini akan memperkenalkan cara menggunakan ACL dalam Rangka Kerja Zend

Cooler Master dan Framework melancarkan kit sarung mini yang inovatif, serasi dengan papan induk komputer riba Cooler Master dan Framework melancarkan kit sarung mini yang inovatif, serasi dengan papan induk komputer riba Dec 15, 2023 pm 05:35 PM

Menurut berita pada 9 Disember, Cooler Master baru-baru ini menunjukkan kit casis mini dengan kerjasama Rangka Kerja penyedia penyelesaian modular notebook pada acara demonstrasi di Taipei Compute Show Perkara unik tentang kit ini ialah ia boleh serasi dengan dan Pasang papan induk daripada buku nota rangka kerja. Pada masa ini, produk ini telah mula dijual di pasaran, berharga 39 dolar AS, yang bersamaan dengan lebih kurang 279 yuan pada kadar pertukaran semasa. Nombor model kit casis ini dinamakan "frameWORKMAINBOARDCASE". Dari segi reka bentuk, ia merangkumi kekompakan dan kepraktisan muktamad, hanya berukuran 297x133x15 mm. Reka bentuk asalnya adalah untuk dapat menyambung dengan lancar ke buku nota rangka kerja

See all articles