Heim  >  Artikel  >  PHP-Framework  >  Ein Artikel stellt alles über Laravel Ignition vor

Ein Artikel stellt alles über Laravel Ignition vor

藏色散人
藏色散人nach vorne
2021-07-09 11:48:492182Durchsuche

In diesem Blogbeitrag erzähle ich dir alles über Ignition.

Sehen wir uns an, was standardmäßig in PHP enthalten ist. PHP stellt diese Funktionalität ohne Verwendung eines Frameworks bereit. Sie erhalten lediglich Fehlermeldungen: kein Stack-Trace, keine Anfrage- oder Anwendungsdetails.
PHP 错误

Symfonys Fehlerseite ist etwas besser, sie zeigt Ihnen den Stack-Trace, aber es hilft nicht viel.

Symfony 错误

Der Screenshot unten stammt von Whoops, das in Ein Artikel stellt alles über Laravel Ignition vor 5 Standard ist. Es ist viel besser als das Standard-Symfony und kann Stack-Traces und einige Informationen zur Anfrage anzeigen. Obwohl Whoops die Standardeinstellung in Ein Artikel stellt alles über Laravel Ignition vor ist, ist es Framework-agnostisch (Anzeige der Fehlersammlung). Es werden nur allgemeine Informationen angezeigt.

Whoops 错误

Dies ist ein Screenshot von Ignition, der neuen Fehleransicht, die wir erstellt haben. Da dies spezifisch für Ein Artikel stellt alles über Laravel Ignition vor ist, können wir viele coole Sachen machen.

Ignition 错误

Entdecken Sie Ignition

Lassen Sie uns Ignition in all seinen Details erkunden. Es ist Open Source und Sie können den Code hier ansehen (https://github.com/facade/ignition).

Wenn Fehler in der Ansicht vorhanden sind, zeigt whoops diese auf diese Weise an. Beachten Sie, dass die Ausnahmemeldung nicht in den zugewiesenen Speicherplatz passt. Sie müssen mit der Maus darüber fahren, um die vollständigen (Informationen) anzuzeigen. Im Stacktrace können Sie sehen, dass die kompilierten Blade-Ansichten und -Inhalte verwendet werden. Dadurch ist es schwierig nachzuverfolgen, welche Blade-Ansichtsdatei Fehler enthält, und der Ansichtsinhalt selbst ist nicht lesbar.

Whoops 视图错误

Ignition ist eine Ein Artikel stellt alles über Laravel Ignition vor-spezifische Fehlerseite. Daher kann es wie ein Hook in das Framework „eingehängt“ werden und zum Offenlegen unkompilierter Ansichtspfade und Ihrer Blade-Ansichten verwendet werden. Oben ist außerdem genügend Platz, um die gesamte Ausnahmeseite anzuzeigen, ohne dass zusätzliche Klicks erforderlich sind. Außerdem zeigen wir standardmäßig nur Bewerbungsrahmen an, da dies möglicherweise die Rahmen sind, die Sie interessieren.

Ignition 视图错误

Wenn Sie auf das Stiftsymbol neben dem Dateinamen rechts neben der Registerkarte Stack Trace klicken, öffnen wir die Datei automatisch in Ihrem bevorzugten Editor. Der Standardwert ist PHPStorm. Sie können ihn in der Konfigurationsdatei ignition als Ihren bevorzugten Editor konfigurieren. stack trace 选项卡右侧文件名旁边的铅笔图标,我们将在您喜欢的编辑器中自动打开该文件。默认情况下是 PhpStorm 。您可以在 ignition 配置文件中将其配置为您最喜欢的编辑器。

注意到右上角的那个小“望远镜”链接了吗?我们只会在您安装了Ein Artikel stellt alles über Laravel Ignition vor Telescope(第一方调试助手)的情况下显示。如果你点击那个链接,你将被带到望远镜内发生错误的异常。

黑暗模式

如果我们默认的错误屏幕太亮了,你会很高兴知道我们的错误页面也有一个黑暗模式。

Dark mode

Ignition 选项卡

让我们探索一下 Ignition 页面上显示的选项卡。

「请求」选项卡

Request tab

在「堆栈跟踪」选项卡旁边,您将看到「请求」选项卡。它显示了您对请求的所有预期信息。

假设你有一个路由定义是这样的::

Route::get('/posts/{post}', function (Post $post) {
    //
});

当此路由发生异常,我们将在 Ignition 中打印 路由参数 post 模型($post 变量),以转化后数组(toArray

Beachten Sie den kleinen „Telescope“-Link in der oberen rechten Ecke? Wir zeigen ihn nur, wenn Sie Ein Artikel stellt alles über Laravel Ignition vor Telescope (einen Debugging-Assistenten eines Erstanbieters) installiert haben. Wenn Sie auf diesen Link klicken, werden Sie zu einer Ausnahme weitergeleitet, bei der im Teleskop ein Fehler aufgetreten ist.

Dunkler Modus

Wenn unser Standard-Fehlerbildschirm zu hell ist, werden Sie froh sein zu erfahren, dass unsere Fehlerseiten auch über einen dunklen Modus verfügen.

🏜 Registerkarten, die auf der Seite Zündung angezeigt werden.

Registerkarte „Anfrage“User tab

Registerkarte „Anfrage🎜🎜 Weiter Auf der Registerkarte „Stack Trace“ sehen Sie die Registerkarte „Anfragen“. Es zeigt alle erwarteten Informationen zu Ihrer Anfrage. 🎜🎜Angenommen, Sie haben eine Routendefinition wie diese::🎜
namespace App\Exceptions;

use Exception;
use Facade\IgnitionContracts\Solution;
use Facade\IgnitionContracts\BaseSolution;
use Facade\IgnitionContracts\ProvidesSolution;

class CustomException extends Exception implements ProvidesSolution
{
    public function getSolution(): Solution
    {
          return BaseSolution::create("You're doing it wrong")
            ->setSolutionDescription('You are obviously doing something wrong. Check your code and try again.')
            ->setDocumentationLinks([
                'Laracasts' => 'https://laracasts.com',
                'Use Flare' => 'https://flareapp.io',
            ]);
    }
}
🎜Wenn auf dieser Route eine Ausnahme auftritt, drucken wir die Routenparameter im Ignition post-Modell ($post Variable), dargestellt in Form eines konvertierten Arrays (toArray). Das Gleiche gilt für „einfache“ Routenparameter, die keiner Bindung bedürfen. Dies ist eine großartige Möglichkeit, leicht zu sehen, welche Informationen Ein Artikel stellt alles über Laravel Ignition vor für diese bestimmte Route erhält. 🎜🎜Nach den Routenparametern zeigen wir Ihnen auch die Liste der in dieser Anfrage verwendeten Middlewares. 🎜🎜Als nächstes kommt der Abschnitt „Ansicht“. Wenn die Ausnahme in einer Ansicht auftritt, zeigen wir hier den Namen der Ansicht an. Mehr noch: Wir werden auch eine Liste aller an die Ansicht übergebenen Daten bereitstellen. 🎜🎜Benutzerregisterkarte🎜🎜🎜🎜

"用户" 选项卡包含有使用应用程序的用户和浏览器的更多信息。

Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor

Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor

Context  选项卡中,我们显示关于您的  repo  (repo位于何处,签出提交hash)和环境(您使用的 PHP 和 Ein Artikel stellt alles über Laravel Ignition vor 的哪个版本)的信息。

Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor

Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor

Debug 选项卡中,我们将显示异常发生之前发生的事情。比如查询、日志和转储。在转储旁边,我们还显示您将 dump 语句放在何处的文件名。单击铅笔图标,您就可以直接访问该文件,并在您最喜欢的编辑器中纠正行号。

建议的解决方案

让我们来看一下另一个错误。这次我们将忘记导入 Class。Ignition 报错页面是这样的。

所以,Ignition 在看到异常是关于一个没有找到的 Class 时。它将尝试找出在其他命名空间中是否存在这个 Class。如果存在的话,它会建议我们导入。
Missing import solution

Ignition 自带一系列常见问题的解决方案。若没有找到Blade视图,会采用一个Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor如下所示。

Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor

您还可以自定义异常解决方案。需要异常类实现Facade\IgnitionContracts\ProvidesSolutions 接口。它要求您添加一个getSolution 方法。下面是一个可能的实现。

namespace App\Exceptions;

use Exception;
use Facade\IgnitionContracts\Solution;
use Facade\IgnitionContracts\BaseSolution;
use Facade\IgnitionContracts\ProvidesSolution;

class CustomException extends Exception implements ProvidesSolution
{
    public function getSolution(): Solution
    {
          return BaseSolution::create("You're doing it wrong")
            ->setSolutionDescription('You are obviously doing something wrong. Check your code and try again.')
            ->setDocumentationLinks([
                'Laracasts' => 'https://laracasts.com',
                'Use Flare' => 'https://flareapp.io',
            ]);
    }
}

下面是在 Ignition 中抛出异常的样子。

Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor

运行解决方案

除了仅仅是建议的解决方案,我们也可以运行它们。想象一下,例如,您忘记设置app key。这是用 Ignition 展示错误的样子。

App key 丢失

如果你点击“生成app key”按钮,我们会在后台生成并设置app key

App key 生成

刷新页面后,应用程序将正常工作(除非它含有其他异常)

您可以通过让异常实现 Facade\IgnitionContracts\ProvidesSolution 来创建可运行的解决方案,这与不可运行的解决方案非常相似)。getSolution 方法既可以返回可运行的解决方案,也可以返回不可运行的解决方案。

namespace App\Exceptions;

use Exception;
use Facade\IgnitionContracts\ProvidesSolution;

class CustomException extends Exception implements ProvidesSolution
{
    public function getSolution(): Solution
    {
          return new MyRunnableSolution();
    }
}

下面是实现类MyRunnableSolution.示例

namespace App\Solutions;

use Facade\IgnitionContracts\RunnableSolution;

class MyRunnableSolution implements RunnableSolution
{
    public function getSolutionTitle(): string
    {
        return 'You are doing it wrong';
    }

    public function getSolutionDescription(): string
    {
        return 'You are doing something wrong, but we can fix it for you.';
    }

    public function getDocumentationLinks(): array
    {
        return [];
    }

    public function getSolutionActionDescription(): string
    {
        return 'To fix this issue, all you need to do is press the button below.';
    }

    public function getRunButtonText(): string
    {
        return 'Fix this for me';
    }

    public function run(array $parameters = [])
    {
        // Your solution implementation
    }

    public function getRunParameters(): array
    {
        return [];
    }
}

以下是在 Ignition 中 如何抛出自定义异常 CustomException 的样子.

Ein Artikel stellt alles über Ein Artikel stellt alles über Laravel Ignition vor Ignition vor

当用户点击Fix this for me修复按钮时,run 函数将执行。

您可以将参数从异常发生的请求传递到将运行解决方案的请求。让getRunParameters 返回一个数组。该数组将被传递给 run

使 Ignition 更聪明

因此,你有能力使用文本或者可运行的解决方案来增强自己的异常。 但有时需要为内置的 PHP 异常,甚至是你无法控制代码的第三方异常提供友好的解决方案。

我们允许你使用 "Solution Providers" 来处理上面提到的难点。 Solution Providers 是可以通过 Ignition 挂钩到解决方案查找过程的类。 当异常被抛出并且 Ignition 接收到异常时,你可以调用自定义 solution provider 为这个异常返回一个或多个可能的解决方案。

例如,您可以创建一个自定义“堆栈溢出”解决方案提供程序,它将尝试为给定的异常找到匹配的堆栈溢出结果,并将它们作为解决方案返回。

我们也在 Ignition 自身上使用解决方案提供者。下面是这样一个解决方案提供者的样子:

use Throwable;
use RuntimeException;
use Facade\IgnitionContracts\Solution;
use Facade\Ignition\Solutions\GenerateAppKeySolution;
use Facade\IgnitionContracts\HasSolutionForThrowable;

class MissingAppKeySolutionProvider implements HasSolutionForThrowable
{
    public function canSolve(Throwable $throwable): bool
    {
        if (! $throwable instanceof RuntimeException) {
            return false;
        }

        return $throwable->getMessage() === 'No application encryption key has been specified.';
    }

    public function getSolutions(Throwable $throwable): array
    {
        return [
            new GenerateAppKeySolution()
        ];
    }
}

这些解决方案提供者可以在Ignition中自动注册,如下所示:

namespace App\Providers;

use App\Solutions\GenerateAppKeySolution;
use Facade\IgnitionContracts\SolutionProviderRepository;
use Illuminate\Support\ServiceProvider;

class YourServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * [@return](https://learnku.com/users/31554) void
     */
    public function register(SolutionProviderRepository $solutionProviderRepository)
    {
        $solutionProviderRepository->registerSolutionProvider(GenerateAppKeySolution::class);
    }
}

就像这样,方案提供者将继续增强 Ignitions 功能,为您的异常提供解决方案,我们迫不及待地想看看社区将提供什么!

定制 Ignition

Ignition 具有可扩展性。您可以添加新选项卡或替换默认选项卡。

Werfen wir einen Blick auf die bereitgestellte Fassade/Zündung-Tinker-Registerkarte. Dieses Paket ist ein auf spatie/laravel-web-tinker basierender Wrapper, der es Ihnen ermöglicht, Artisan tinker in Ihrem Browser zu verwenden. Artisan tinker

安装了 facade/ignition-tinker-tab,您就可以在错误页面上使用Artisan tinker

Wenn „fassade/ignition-tinker-tab“ installiert ist, können Sie Artisan tinker auf Fehlerseiten verwenden.

Tinker 选项卡

Wir haben auch ein zweites Paket namens „fassade/zündcode-editor“ erstellt. Diese Registerkarte ersetzt die standardmäßige Stack-Trace-Registerkarte durch eine benutzerdefinierte Registerkarte, mit der Sie Code auf dem Fehlerbildschirm bearbeiten können. Hier erfahren Sie, was es bewirkt.

Ein Artikel stellt alles über Laravel Ignition vor

Wenn Sie erfahren möchten, wie Sie benutzerdefinierte Registerkarten hinzufügen, lesen Sie bitte die Dokumentation zum Hinzufügen von Registerkarten.
Verwandte Empfehlungen: Die neuesten fünf Ein Artikel stellt alles über Laravel Ignition vor-Video-Tutorials

Originaladresse: https://freek. dev /1441-ignition-a-new-error-page-for-laravel

Übersetzungsadresse: https://learnku.com/laravel/t/33857
🎜

Das obige ist der detaillierte Inhalt vonEin Artikel stellt alles über Laravel Ignition vor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen