heintzelman/laravel-hooks

此包的最新版本(dev-master)没有提供许可证信息。

轻松地在Laravel 4.1的各个生命周期点进行钩接。

dev-master 2013-12-04 19:30 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:37:07 UTC


README

此包适用于Laravel 4.1及以上版本。它允许您的应用程序在不创建服务提供程序的情况下,钩接到Laravel请求生命周期的各个方面。

快速用例

假设您想在每次请求上都执行一些任意代码,并且希望这段代码在应用程序启动之前执行。通常,您会创建一个服务提供程序并将代码放在其 register() 方法中。

使用Laravel-Hooks,您可以在 app/start/preboot.php 文件中创建一个文件并添加您的代码。

非常适合注册中间件或其他底层代码。

安装

编辑您的项目composer.json文件,以要求heintzelman/laravel-hooks。

"require" {
    "laravel/framework": "4.1.*",
    "heintzelman/laravel-hooks": "dev-master"
}

接下来,通过控制台更新您应用程序的依赖项。

$ composer update

最后,添加服务提供程序。编辑app/config/app.php文件,并在提供程序数组末尾添加新的服务提供程序。

'Heintzelman\LaravelHooks\LaravelHooksServiceProvider',

这就完成了。现在您可以创建下面定义的任何钩接文件。

可用的钩接

以下文件的存在会触发它们在以下位置的包含。

  • app/start/preboot.php - 在服务提供程序 register() 方法调用的同一位置发生。
  • app/start/onbooting.php - 在服务提供程序启动后,但在应用程序被认为启动之前发生。
  • app/start/onbooted.php - 在应用程序启动后发生。(与您的正常启动文件start/global.php、filters.php和routes.php加载的同一位置。)
  • app/start/ondown.php - 当您的应用程序处于维护模式时执行。
  • app/start/onbefore.php - 作为全局应用程序“之前”过滤器执行。
  • app/start/onafter.php - 作为全局应用程序“之后”过滤器执行。
  • app/start/onfinish.php - 在将响应发送给用户后执行。
  • app/start/onshutdown.php - 当您的应用程序关闭时执行。

您也可以使用 app/hooks 目录。

Laravel-Hooks在两个位置查找钩接文件。

  1. 首先检查 app/hooks。如果在该处找到钩接文件,则使用该文件。
  2. 接下来检查 app/start。如果在该处找到钩接文件,则使用该文件。

请注意,如果在第一个位置(app/hooks)找到钩接文件,则使用该文件,并且不会检查特定钩接的 app/start 目录。

您可以在两个目录之间混合钩接文件。例如,您有 app/start/preboot.phpapp/hooks/onfinish.php

回调钩接与过滤器钩接

ondown.phponbefore.phponafter.php 被认为是过滤器钩接。它们应该像Laravel过滤器一样操作,并在需要时返回一个值。

例如,假设您有一个以下的 app/hooks/ondown.php 文件。

<?php
return View::make('maintenance.mode');
?>

由于这个文件返回了一个值,所以如果您使用 App::down() 方法来注册过滤器,它的操作方式将完全相同。这意味着,Laravel终止了请求分派的其他部分,并将该值返回给用户。

所有其他钩接都被认为是回调钩接。任何返回值都被忽略。

加快钩接速度

您可以通过禁用未使用的任何钩接来加快检查钩接文件的速度。

创建一个app/config/hooks.php文件,并添加您想禁用的钩子条目。

<?php
// app/config/hooks.php
return array(
    'onshutdown' => false,      // do not use the onshutdown hook
    'onbefore' => false,        // or the onbefore hook
);
?>

每个钩子的详细信息

每个文件都可以访问到 $app。如果您想访问应用程序组件,如 $app['router'],这很有用。

preboot.php

此文件在请求注册服务提供者时加载。这发生在服务提供者或应用程序启动之前。

由于这是在生命周期早期执行,因此在访问其他Laravel组件时应谨慎行事。使用AppConfig外观是安全的,但其他组件的访问应仅通过$app['name']机制进行。即使如此,Laravel组件也并非全部加载完毕。

这是注册中间件的理想位置!

以下列出了可以使用的组件,因为它们是Laravel核心的一部分

  • $app - 应用程序
  • $app['config'] - 配置类
  • $app['events'] - 事件调度器
  • $app['router'] - 路由器
  • $app['exception'] - 异常处理器

(根据您的服务提供者的配置,您的应用程序可能还有其他组件可用。您需要针对您的特定应用程序进行测试。)

onbooting.php

此文件在所有服务提供者启动后加载,但在应用程序启动之前。由于服务提供者已经启动,因此您现在可以像平常一样使用Laravel外观。

请注意由于您的应用程序的app/start/global.phpapp/routes.phpapp/filters.php文件尚未加载,请不要在此钩子中执行需要这些文件功能的内容。

onboot.php

此文件在应用程序启动后加载。您的应用程序的app/start/global.phpapp/routes.phpapp/filters.php文件现在应该已加载。

ondown.php

此文件仅在应用程序处于维护模式时加载。

请记住,这是一个过滤器。您应该从该文件返回一个响应或视图。如果您不返回任何内容,则下一个注册的down()过滤器(如果有)将被调用。

onbefore.php

此文件在确定请求的路由之前加载。

除了$app变量外,您还有一个可用的$request变量。您可以使用$request变量并根据需要对其进行修改。

请记住,这是一个过滤器。大多数时候,您希望onbefore.php返回一个请求、视图或重定向。

如果您不返回一个值,那么Laravel将接下来确定路由并将请求分派给路由。

onafter.php

此文件在分派响应后加载。这是您的应用程序在将响应发送给用户之前修改响应的最后一步。

除了$app变量外,您还可以使用$request$response

如果您想更改响应,最常见的方法之一是使用$response->setContent()方法。

onfinish.php

此文件在将响应发送给用户后加载。

除了$app变量外,您还可以使用$request$response。尽管这些变量可用,但更改它们对用户接收的内容没有影响。

通常,此回调用于记录或进行其他您不希望在请求期间花费时间的活动。

onshutdown.php

此文件仅在所有处理结束时加载。在执行此操作时,Laravel正在关闭。