heintzelman / laravel-hooks
轻松地在Laravel 4.1的各个生命周期点进行钩接。
Requires
- php: >=5.3.0
- illuminate/support: 4.1.x
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在两个位置查找钩接文件。
- 首先检查
app/hooks
。如果在该处找到钩接文件,则使用该文件。 - 接下来检查
app/start
。如果在该处找到钩接文件,则使用该文件。
请注意,如果在第一个位置(app/hooks
)找到钩接文件,则使用该文件,并且不会检查特定钩接的 app/start
目录。
您可以在两个目录之间混合钩接文件。例如,您有 app/start/preboot.php
和 app/hooks/onfinish.php
。
回调钩接与过滤器钩接
ondown.php
、onbefore.php
和 onafter.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组件时应谨慎行事。使用App
和Config
外观是安全的,但其他组件的访问应仅通过$app['name']
机制进行。即使如此,Laravel组件也并非全部加载完毕。
这是注册中间件的理想位置!
以下列出了可以使用的组件,因为它们是Laravel核心的一部分
$app
- 应用程序$app['config']
- 配置类$app['events']
- 事件调度器$app['router']
- 路由器$app['exception']
- 异常处理器
(根据您的服务提供者的配置,您的应用程序可能还有其他组件可用。您需要针对您的特定应用程序进行测试。)
onbooting.php
此文件在所有服务提供者启动后加载,但在应用程序启动之前。由于服务提供者已经启动,因此您现在可以像平常一样使用Laravel外观。
请注意由于您的应用程序的app/start/global.php
、app/routes.php
和app/filters.php
文件尚未加载,请不要在此钩子中执行需要这些文件功能的内容。
onboot.php
此文件在应用程序启动后加载。您的应用程序的app/start/global.php
、app/routes.php
和app/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正在关闭。