Laravel事件提供了简单的观察者模式实现,允许你订阅和监听应用中的事件。
配置文件
<?php use Event\Event; Event::listen('ON_TEST', [ 'Event\Listeners\Test', function($msg){ echo $msg.':函数方式'; echo "<br />"; }, 'Event\Listeners\Test@add' ]); //综合单废除以后 Event::listen('wws_abolished', ['\Event\Listeners\PaintOrderListener@abolish']);
事件服务类
<?php /** * 一个简单的事件服务 */ namespace Event; class Event { protected $listen; protected static $instance = null; private function __construct() { } public static function getInstance() { if (empty(static::$instance)) { static::$instance = new self(); } return static::$instance; } protected function parseClassCallable($listener) { $segments = explode('@', $listener); return [$segments[0], count($segments) == 2 ? $segments[1] : 'handle']; } public function createClassListener($listener) { list($class, $method) = $this->parseClassCallable($listener); return function () use ($class, $method) { return call_user_func_array( [$class, $method], func_get_args() ); }; } //事件配置文件 public static function boot($config) { include_once($config); } public function hasListen($event) { return isset($this->listen[$event]); } public static function once($event, $callback) { $self = static::getInstance(); if (!$self->hasListen($event)) { static::listen($event, $callback); } } //注册监听器 public static function listen($event, $callback) { if (!is_array($callback)) { $callback = [$callback]; } $self = static::getInstance(); foreach ($callback as $item) { if (is_callable($item)) { $self->listen[$event][] = $item; } if (is_string($item)) { $self->listen[$event][] = $self->createClassListener($item); } } } //要触发一个事件,可以使用Event门面,传递一个事件实例到fire方法,fire方法会分发事件到所有监听器 public static function fire() { $args = func_get_args(); $event = array_shift($args); $args[] = $event; $self = static::getInstance(); foreach ($self->listen[$event] as $callback) { if (is_callable($callback)) { $result = call_user_func_array($callback, $args); if (false === $result) { //如果事件处理报错则终止向下传递 return false; } } } } }
处理小例子
<?php namespace Event\Listeners; class Test { public function handle($msg) { echo $msg.':不指定方法'; echo '<br/>'; } public function add($msg) { echo $msg.":指定方法"; echo "<br />"; } }
调用事件
//ON_TEST:不指定方法 //ON_TEST:函数方式 //ON_TEST:指定方法 Event::boot(CONF_PATH.'event.php'); Event::fire('ON_TEST');
相关推荐
这个扩展包通常被称为“Eloquent for Elasticsearch”,因为它模仿了Laravel的Eloquent ORM(对象关系映射)的语法和工作方式,使得操作Elasticsearch就像操作数据库中的表一样简单。 **Elasticsearch简介** ...
服务容器是Laravel的核心部分,负责管理类的依赖关系和实例化。Facades只是服务容器的一个便利接口,它们使得开发者无需直接与服务容器交互,也能轻松地注入依赖和解耦代码。 在学习`Laravel开发-facades`时,你将...
虽然arty可能不提供完整的Laravel种子功能,但你可以模仿Laravel的种子机制来创建和运行种子文件。 6. **自定义命令**:arty允许开发者根据需求扩展命令,这意味着你可以添加自己的命令来完成特定任务,比如数据...
Laravel Modules旨在模仿类似Yii2或Symfony的bundle或module概念,为开发者提供了一种优雅的方式来创建可复用、可配置的模块化组件。 ## 1. 模块化开发的优势 1. **代码组织**:通过模块化,可以将复杂的应用程序...
在laravel框架中,IoC容器被广泛使用,用于管理服务和其依赖。通过定义服务绑定和解析,开发者可以方便地进行依赖注入,使得组件之间松耦合,降低了代码的复杂度。 在laravel的IoC容器中,你可以注册服务提供者...
这通常包括安装Composer(PHP的依赖管理器),创建一个新的Laravel项目,以及配置服务器环境变量如数据库连接等。 4. **Laravel的目录结构** "rubywebsite-master"可能是项目的根目录,包含所有源代码。Laravel的...
为了将这种体验带入前端,一些开发者创建了轻量级的JavaScript库,模仿Laravel的模型(Model)概念,使得前端数据管理更加方便。这个压缩包文件"lorisleiva-javel-5ec91aa"可能就是一个这样的实现,名为"Laravel for...
1. `composer.json` - Laravel项目的依赖管理文件,列出了项目所需的所有PHP库及其版本。 2. `server.php`/`public/index.php` - Laravel的启动脚本,负责引导请求到框架的核心部分。 3. `app/` - 包含应用的自定义...
**Laravel 源码分析** Laravel 是一个广受欢迎的 PHP ...通过分析 `Laravel-code-master` 压缩包中的源码,开发者可以更深入地了解这些概念,甚至模仿 Laravel 设计自己的框架,从而增强对 PHP 开发的理解和实践能力。
这个CMS可能专注于提供一种结构化的、模块化的资源管理方式,模仿蜂窝的六边形结构,使得数据组织更加有序且高效。下面将详细介绍与Laravel开发和资源管理相关的知识点。 1. **Laravel框架**:Laravel是PHP的一个...
在Laravel框架中,开发"Themes"是一种组织和管理应用前端样式、布局及视图的有效方式。这使得我们可以轻松地切换或扩展应用的外观,同时保持后端代码的整洁和独立。下面将详细介绍Laravel中如何进行主题开发,以及...
"缺少Laravel管理框架" 表明在Laravel社区中,可能缺乏一个广泛接受和使用的官方管理界面,而AdminArchitect正是为填补这一空白而创建的,它提供了类似ActiveAdmin的体验,ActiveAdmin是Rails开发中的一个流行管理...
1. **Laravel 框架基础**:理解路由、控制器、视图、模型、数据库迁移、Eloquent ORM 等核心概念。 2. **Blade 模板引擎**:学习如何使用 Blade 语法创建模板,实现动态内容渲染。 3. **数据库设计**:涉及用户表、...
接下来,可以将`simple_html_dom`类引入到控制器或其他需要的地方,以便在Laravel的环境中使用。 4. **实例化与解析HTML**:通过`file_get_html()`函数,可以加载一个HTML字符串或文件,将其转化为`simple_...
**Statamic** 则是一个现代化的静态站点生成器,同样提供了强大的内容管理功能,以简洁的 Markdown 编辑和灵活的结构而受到开发者喜爱。 在 **laravel-atlas** 的开发过程中,开发者可能关注以下几个方面: 1. **...
标题中的“基于laravel+reactjs实现的面向中小企业的、开源免费的、类Jira的问题需求跟踪工具”表明,这是一个采用现代Web开发技术构建的软件系统,专为中小企业设计,模仿了知名的项目管理工具Jira的功能,并且是...
【标题】:“laravel-airbnb:使用Laravel的简单AirBnb克隆”是指一个基于Laravel框架开发的Web应用程序项目,旨在模仿知名的在线住宿预订平台AirBnb的功能和用户体验。这个项目为开发者提供了一个实践Laravel框架...
学生成绩管理系统是一种常见的软件应用,它主要用于教育机构或教师管理学生的学术成绩、个人信息和出勤情况等。这个项目案例提供了完整的源代码,是初学者踏入编程世界,特别是IT行业中数据库管理和Web应用开发的...
首先,Laravel内置了一个非常实用的验证器Validator,它允许开发者以非常直观的方式对请求数据进行验证。在实际应用中,开发者可以调用`Validator::make()`方法来创建一个验证器实例。该方法接收两个参数,第一个...
通过这个项目,学生将深入理解Laravel框架的基本概念,如路由配置、控制器设计、视图模板、Eloquent ORM(对象关系映射)以及Blade模板引擎。他们还将学习如何使用Composer管理依赖,使用Git进行版本控制,以及如何...