V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  thenbsp  ›  全部回复第 1 页 / 共 7 页
回复总数  131
1  2  3  4  5  6  7  
能否远程或兼职?可以全天兼职,但不太想去上海,可以的话联系我,认真的,招聘要求基本符合,另外对汽车很感兴趣!

Gmail: [email protected]
Github: https://github.com/thenbsp
2016-08-29 22:25:46 +08:00
回复了 lml12377 创建的主题 程序员 Symfony 中 event 的 Listener 和 Subscriber 的区别是什么?
@lml12377

1 ,可以处理多个事件,即使是同一个 name ,也可以多次触发。
2 ,当然需要注册,在注册 Subscriber 的时候,内部才会调用 addListener ,否则只是一个 callable 对象,没有和 eventName 绑定关系。

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/EventDispatcher/EventDispatcher.php#L30

最终这些 event 是以 eventName 为 key 存储在 EventDispatcher::listeners 属性上的二维数组,寻找指定 eventName 不需要遍历,但触发时需要遍历!

如果你仔细看过源码,你会发现第一个 callable 是不允许有返回值的(因为同一个事件可能会有多个 callable 被触发),因此我还专门自己写了个类似功能的事件管理。

https://github.com/thenbsp/wechat/blob/master/src/Event/EventListener.php

另外,这个组件相对不那么复杂,你可以使用 Composer 安装一下一步一步打印看看!
2016-08-25 16:15:49 +08:00
回复了 lml12377 创建的主题 程序员 Symfony 中 event 的 Listener 和 Subscriber 的区别是什么?
@thenbsp 最后一句写反了,应该是

listener 与 subscriber 的不同点在于,前者在定义阶段就指定了由谁来负责处理事件,而后者是在事件中去决定需要去捕获哪些事件(也就是 EventSubscriberInterface::getSubscribedEvents 方法),后者更灵活, Symfony 内部代码都是使用的 subscriber !
2016-08-25 16:12:44 +08:00
回复了 lml12377 创建的主题 程序员 Symfony 中 event 的 Listener 和 Subscriber 的区别是什么?
我不太会组织这些技术含义,只说说我自己的理解,希望能帮到你!

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/HttpKernel.php#L128

```
$event = new GetResponseEvent($this, $request, $type);
$this->dispatcher->dispatch(KernelEvents::REQUEST, $event);
```

EventDispatcher ,即调度器, dispatch 为动词,是指去调度(触发)某个事件,这个类似于 jQuery 的 trigger 和 angular 中的 $broadcast($emit)。

在这里 KernelEvents::REQUEST 为事件名称,$event 是事件实体对象(当前事件的相关参数,也可以使用 Symfony\Component\EventDispatcher\GenericEvent 方法),说直白一点,就是当发生 KernelEvents::REQUEST 的时候,去做一个件事情,并把 $event 当作参数传递过去,但是你会发现只是定义了事件,并没有说去做的事情是什么!

EventDispatcher 中还有一个方法, EventDispatcher::addListener($eventName, $listener, $priority = 0):

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/EventDispatcher/EventDispatcher.php#L102

这个 addListener (监听器)就是用来指定前面所说的:告诉事件调度器,在某个事件发生时去做什么,第二个参数就是事件处理,举个例子:

```
$this->dispatcher->addListener(KernelEvents::REQUEST, function(GetResponseEvent $event) {
$request = $event->getRequest();
var_dump($request->getClientIp());
exit;
});
```

我监听了 KernelEvents::REQUEST 事件,来获取当前请求对象中的 IP 地址,可以看到,在事件处理中的 $event 就是事件发生时,传传递过来的 GetResponseEvent 事件实体!

subscriber 与 listener 相同的,在 EventDispatcher::addSubscriber 内部去掉用了 addListener 方法,看源码:

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/EventDispatcher/EventDispatcher.php#L102

subscriber 与 listener 的不同点在于,前者在定义阶段就指定了由谁来负责处理事件,而后者是在事件中去决定需要去捕获哪些事件(也就是 EventSubscriberInterface::getSubscribedEvents 方法),后者更灵活, Symfony 内部代码都是使用的 subscriber !
2016-06-27 23:49:18 +08:00
回复了 dabpop139 创建的主题 PHP 有没有爱折腾的 PHP 和前端方向的朋友,诚心求组队?
我跟你差不多,喜欢折腾 PHP 和前端,欢迎关注: https://github.com/thenbsp
2016-06-22 18:49:17 +08:00
回复了 duanduang 创建的主题 分享创造 小短-我们都爱动态图,出了个 2.0 版本。
唉,我想说我之前也做了一个这和类的网站,后来又下线了,跟你这类型一模一样。域名叫 giffans.com ,后来域名到期了也没续。
2016-06-13 21:48:46 +08:00
回复了 nonfu 创建的主题 PHP Laravel 5 岁了, Happy Birthday!
我用 Symfony3 !
2016-06-03 16:51:32 +08:00
回复了 xuhao360 创建的主题 问与答 网上看到的 考考大家
@whiteskin 找出去的 65 你不算进?
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5440 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 08:29 · PVG 16:29 · LAX 00:29 · JFK 03:29
Developed with CodeLauncher
♥ Do have faith in what you're doing.