关于Laravel5中的Container, Command Bus, Event

WBOY
풀어 주다: 2016-08-08 09:24:43
원래의
1617명이 탐색했습니다.
关于bind方法:
-这两种绑定相同,在$app->make()的时候,都返回一个新的实例

$this->app->bind('App\DAO\UserDAO',function(){ return new UserDAOImpl(); }); $this->app->bind('App\DAO\UserDAO','App\DAO\Impl\UserDAOImpl');
로그인 후 복사

-bind还可以设置alias,如下,第一个参数传入数组,key为别名,value为接口名
$this->app->bind(['dao.user' => 'App\DAO\UserDAO'],'App\DAO\Impl\UserDAOImpl');
로그인 후 복사

-第三个参数为true就是singleton的效果一样

$this->app->bind(['dao.user' => 'App\DAO\UserDAO'],'App\DAO\Impl\UserDAOImpl', true);
로그인 후 복사

Command Bus
本质是一个相关方法的调用集合
-生成一个Command
php artisan make:command FirstCommand
로그인 후 복사

这时会在app\Commands下生产一个FirstCommand类,其中的handle方法就是具体执行的内容,handle方法支持IoC。
-调用Command
在Controller中调用dispatch方法,如下。 默认的Controller拥有 `trait DispatchesCommands`所以拥有dispatch方法。下面的命令在controller中执行,就会执行FirstCommand::handle()中的内容
$this->dispatch(new FirstCommand());
로그인 후 복사

-队列Command
php artisan make:command PurchasePodcast --queued
这个 `--queued`参数,会增加 `Illuminate\Contracts\Queue\ShouldBeQueued`接口和 `SerializesModels`trait 。 这个接口没有任何方法,只是一个标记(instanceof)。
-管道命令(TODO)
Event事件
-生成事件类
`EventServiceProvider`中的listen属性中添加事件名称和Handler的名称,例如:
protected $listen = [ 'App\Events\FirstEvent' => [ 'App\Handlers\Events\FirstEventHandler', ], ];
로그인 후 복사

运行命令 `php artisan event:generate`就能根据$listen中的内容生成对应文件,并且不会覆盖已经生成的文件。
-处理事件
事件注册时在 `EventServiceProvider`之中的boot完成的。 Hanlder中的handle方法接受一个FirstEvent参数,handle为处理方法。
-触发事件
 \Event::fire(new FirstEvent()); //or use the helper function event(new FirstEvent());
로그인 후 복사

-队列事件
加上 `Illuminate\Contracts\Queue\ShouldBeQueued`标记即可,同时,使用 `Illuminate\Queue\InteractsWithQueue`trait, 可以在处理事件之中使用
$this->release(30); $this->delete();
로그인 후 복사

等方法把任务删除,重置等等。
-订阅者
订阅者本质还是一个handler,必须实现subscribe($event)方法。
class ThirdEventHandler { /** * Create the event handler. * * @return void */ public function __construct() { // } public function doSomething(){ echo " ThirdEventHalder !!!.."; } public function doSomethingToo(){ echo "lalala, ThirdEventHalder again!!!.."; } /** * 注册监听器给订阅者。 * * @param Illuminate\Events\Dispatcher $events * @return array */ public function subscribe($events) { $events->listen('App\Events\FirstEvent', 'App\Handlers\Events\ThirdEventHandler@doSomething'); $events->listen('App\Events\FirstEvent', 'App\Handlers\Events\ThirdEventHandler@doSomethingToo'); } }
로그인 후 복사

如何订阅呢?
$subscriber = new App\Handlers\Events\ThirdEventHandler(); Event::subscribe($subscriber); // or rely on IoC Event::subscribe('App\Handlers\Events\ThirdEventHandler');
로그인 후 복사

搞定了。
一个Event可以对应多个Handler,Handler的执行顺序和绑定顺序一致。
一个Subscriber可以绑定多个事件

以上就介绍了关于Laravel5中的Container, Command Bus, Event,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!