lsrur/inspector

Laravel Inspector,Web Artisan 的调试和性能分析工具

维护者

详细信息

github.com/lsrur/Inspector

来源

问题

安装41 081

依赖者: 0

建议者: 0

安全性: 0

星级: 236

关注者: 13

分支: 18

语言:HTML

v1.0.6 2017-07-31 22:39 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:20:10 UTC


README

概述

安装

本软件包已在 PHP 5.6、PHP 7、Laravel 5.2 和 Laravel 5.3-Dev 下进行测试

通过 composer 安装软件包

composer require lsrur/inspector

接下来,将 InspectorServiceProvider 添加到 config/app.php 中的 providers 数组

Lsrur\Inspector\InspectorServiceProvider::class,

并在相同的配置文件中添加此 Facade

'Inspector' => Lsrur\Inspector\Facade\Inspector::class,

仅用于开发期间使用,而不是生产期间,请勿编辑 config/app.php 并将以下内容添加到您的 AppServiceProvider

public function register()
{
  // ...
  if ($this->app->environment() == 'development') {
      $this->app->register(\Lsrur\Inspector\InspectorServiceProvider::class);
  }
  // ...
}

配置

要使 Inspector 成为默认异常渲染器,请在您的 Laravel 项目的 app/Exceptions/Handler.php 文件中添加以下行

public function render($request, Exception $exception)
{
    \Inspector::renderException($exception);	// <= THIS LINE
    return parent::render($request, $exception);
}

仅用于开发

public function render($request, Exception $exception)
{
    if (\App::environment() == 'development')
    {
        \Lsrur\Inspector\Facade\Inspector::renderException($exception);
    }
    return parent::render($request, $exception);
}

使用

Laravel inspector 可以通过 Facade、提供的辅助函数和 Blade 指令调用

//Using Facade
\Inspector::log(...);
\Inspector::info(...);

//Using the "inspector" helper function
inspector()->info(...);
inspector()->warning($myVar);

// "li" is an alias of "inspector"
li()->error(...);
li()->group('myGroup');

// "inspect" function makes an "Inspector::log($v)" for each passed argument
inspect($var1, $var2, $var3, ...);

// Dump and die using Laravel Inspector magic
idd();
idd($var1, $var2);

// Inside Blade
@li(cmd,param1,param2,...)

// samples
@li('log', 'My comment', $myVar)
@li(log, 'My comment', $myVar) //also works without command quotes
@li(group,"myGroup")
@li(endGroup)

Laravel inspector 只在配置变量 app.debug 为 true 时才激活。
无论如何,您可以使用以下方式临时关闭 Inspector(仅针对当前请求)

li()->turnOff();

消息

您可以使用以下方法检查对象和变量,每个方法都有自己的输出格式

示例

li()->log("MyData", $myData);
li()->info($myData);
li()->table("clients", $myClientsCollection);

此外,您还可以使用 "inspect" 辅助函数快速检查对象和变量。

inspect($var1, $var2, $var3,...);

分组消息

Laravel Inspector 允许您将消息分组为节点和子节点

li()->group('MyGroup');
	li()->info($data);
	li()->group('MySubGroup');
		li()->error('oops', $errorCode);
	li()->groupEnd();
	li()->success('perfect!');
li()->groupEnd();

除了分组信息的能力外,每个组和子组的执行时间也将被测量并显示。如果您忘记关闭一个组,Laravel Inspector 将在脚本结束时自动执行,但该组的执行时间无法获取。

计时器

示例

li()->time("MyTimer");
// ...
li()->timeEnd("MyTimer");

li()->timeStamp('Elapsed time from LARAVEL_START here');

重定向

Laravel Inspector 平滑处理重定向;显示原始和目标视图的收集器包。

输出并终止

dd() 方法(或 idd() 辅助函数)将输出整个收集器包并终止脚本

\Inspector::dd();
li()->dd();

// or simply
idd();

// adding last minute data
idd($var1, $var2,...)

与包的其他部分一样,此功能智能地确定输出格式,即使调用是从 CLI 执行的。

另一种进行检查的方法,但不会中断请求/响应流,是将参数 laravel_inspector=dump 添加到 URL

http://myapp.dev/contacts?id=1&laravel_inspector=dump

因此,Laravel Inspector 不会激活,直到达到可终止的中间件。

异常

函数 addException() 将检查我们捕获的异常

try {
	...
} catch (Exception $e) {
	li()->addException($e);
}

可选地,您可以在开发时间(app.debug=true)将 LI 设置为默认异常渲染器。有关设置方法,请参阅 配置

VIEW/AJAX/API 请求,工作原理

Laravel Inspector (LI) 自动检测请求/响应对的数据类型并确定输出格式。如果检测到视图响应,则需要将收集到的信息优雅地显示在浏览器控制台中的代码将作为javascript注入到该视图中。除此之外,LI 还会添加一小段纯javascript代码,作为通用的http拦截器,该拦截器将检查后续的 AJAX 调用,寻找 LI 注入的信息(该拦截器已在纯javascript、Angular 1.x (.ajax) 下进行测试,并应与任何js框架兼容)。该拦截器还在每个客户端 AJAX 调用中添加一个头部信息,让 LI 知道拦截器存在。然后,从 Laravel 的角度来看,在 AJAX 请求或 JSON 响应期间,LI 将发送一个脚本供拦截器解释(并在浏览器控制台中正确渲染),如果没有该头部信息,则假定请求是从 cURL、REST 客户端应用程序或其他地方发送的。

如果您正在开发,例如,SPA 应用程序,并且只使用 Laravel 作为 API,而不用于提供网页,您可以在客户端应用程序中包含以下代码,以充分利用 Laravel Inspector 的所有格式化功能。

(function(XHR) {
"use strict";

var send = XHR.prototype.send;

XHR.prototype.send = function(data) {
	var self = this;
	var oldOnReadyStateChange;
	var url = this._url;
	this.setRequestHeader('Laravel-Inspector', 'interceptor-present');
	function onReadyStateChange() {
		if(self.readyState == 4 /* complete */) {
			var response = JSON.parse(this.response);
			if (typeof response.LARAVEL_INSPECTOR !== 'undefined') {
				if(typeof response.LARAVEL_INSPECTOR === 'string')
				{
					eval(response.LARAVEL_INSPECTOR);
				} else {
					console.log('LARAVEL INSPECTOR ', response);
				 }
			 }   
		}
		if(oldOnReadyStateChange) {
			oldOnReadyStateChange();
		}
	}
	if(!this.noIntercept) {            
		if(this.addEventListener) {
			this.addEventListener("readystatechange", onReadyStateChange, false);
		} else {
			oldOnReadyStateChange = this.onreadystatechange;
			this.onreadystatechange = onReadyStateChange;
		}
	}
	send.call(this, data);
}
})(XMLHttpRequest);

许可证

Laravel Inspector 遵循 MIT 许可证