ホームページ >PHPフレームワーク >Laravel >1 つの記事で Laravel Ignition についてすべてが紹介されています

1 つの記事で Laravel Ignition についてすべてが紹介されています

藏色散人
藏色散人転載
2021-07-09 11:48:492252ブラウズ

このブログ投稿では、Ignition についてすべて説明します。

PHP にデフォルトで何が含まれているかを見てみましょう。 PHP は、フレームワークを使用せずにこの機能を提供します。エラーが発生するだけです。スタック トレースもリクエストやアプリケーションの詳細もありません。
PHP 错误

Symfony のエラー ページは少し優れており、スタック トレースが表示されますが、あまり役に立ちません。

Symfony 错误

以下のスクリーンショットは、1 つの記事で Laravel Ignition についてすべてが紹介されています 5 に標準搭載されている Whoops のスクリーンショットです。これはデフォルトの Symfony よりもはるかに優れており、スタック トレースとリクエストに関するいくつかの情報を表示できます。 Whoops は 1 つの記事で Laravel Ignition についてすべてが紹介されています のデフォルトですが、フレームワークに依存しません (エラー収集の表示)。一般的な情報のみが表示されます。

Whoops 错误

これは、作成した新しいエラー ビューである Ignition のスクリーンショットです。これは 1 つの記事で Laravel Ignition についてすべてが紹介されています に特有のものなので、たくさんの素晴らしいことができます。

Ignition 错误

Ignition を発見する

Ignition を詳しく見てみましょう。これはオープンソースであり、コードはここ (https://github.com/facade/ignition) で表示できます。

ビューにエラーがある場合、whoops は次のようにエラーを表示します。例外メッセージが割り当てられたスペースに収まらないことに注意してください。全体(情報)を表示するには、その上にマウスを移動する必要があります。スタック トレースでは、コンパイルされた Blade ビューとコンテンツが使用されていることがわかります。このため、どの Blade ビュー ファイルにエラーが含まれているかを追跡することが困難になり、ビューのコンテンツ自体を読み取ることができなくなります。

Whoops 视图错误

Ignition は 1 つの記事で Laravel Ignition についてすべてが紹介されています 固有のエラー ページです。したがって、フックのようにフレームワークに「フック」し、コンパイルされていないビュー パスと Blade ビューを公開するために使用できます。上部には、追加のクリックを必要とせずに例外ページ全体を表示するのに十分なスペースもあります。また、関心のあるフレームである可能性があるため、デフォルトではアプリケーション フレームのみが表示されます。

Ignition 视图错误

[スタック トレース] タブの右側にあるファイル名の横にある鉛筆アイコンをクリックすると、お気に入りのエディタでファイルが自動的に開きます。書類。デフォルトは PhpStorm です。 ignition 構成ファイルでお気に入りのエディターとして構成できます。

右上隅に小さな「Telescope」リンクがあることに気づきましたか? これは、1 つの記事で Laravel Ignition についてすべてが紹介されています Telescope (ファーストパーティのデバッグ アシスタント) がインストールされている場合にのみ表示されます。そのリンクをクリックすると、望遠鏡内で問題が発生した例外が表示されます。

ダーク モード

デフォルトのエラー画面が明るすぎる場合は、エラー ページにもダーク モードがあることを知っていただければ幸いです。

Dark mode

Ignition タブ

Ignition ページに表示されるタブを見てみましょう。

[リクエスト] タブ

Request tab

[スタック トレース] タブの隣に、[リクエスト] タブが表示されます。リクエストに必要な情報がすべて表示されます。

次のようなルート定義があるとします::

Route::get('/posts/{post}', function (Post $post) {
    //
});
このルートで例外が発生すると、Ignition

post モデル ( $post 変数)、変換された配列 (toArray) の形式で表示されます。バインディングを必要としない「単純な」ルート パラメーターについても同様です。これは、1 つの記事で Laravel Ignition についてすべてが紹介されています がこの特定のルートに関してどのような情報を受信して​​いるかを簡単に確認する優れた方法です。

ルートパラメータの後に、このリクエストで使用されるミドルウェアのリストも表示されます。

次は「表示」セクションです。ビューで例外が発生した場合、ここにビュー名が表示されます。さらに、ビューに渡されるすべてのデータのリストも提供します。

ユーザータブ

User tab

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

1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています

1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています

Context  选项卡中,我们显示关于您的  repo  (repo位于何处,签出提交hash)和环境(您使用的 PHP 和 1 つの記事で Laravel Ignition についてすべてが紹介されています 的哪个版本)的信息。

1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています

1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています

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

建议的解决方案

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

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

Ignition 自带一系列常见问题的解决方案。若没有找到Blade视图,会采用一个1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています如下所示。

1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています

您还可以自定义异常解决方案。需要异常类实现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 中抛出异常的样子。

1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています

运行解决方案

除了仅仅是建议的解决方案,我们也可以运行它们。想象一下,例如,您忘记设置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 的样子.

1 つの記事で 1 つの記事で Laravel Ignition についてすべてが紹介されています Ignition についてすべてが紹介されています

当用户点击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 具有可扩展性。您可以添加新选项卡或替换默认选项卡。

提供されている facade/ignition-tinker-tab を見てみましょう。このパッケージは spatie/laravel-web-tinker に基づくラッパーで、ブラウザで Artisan tinker を使用できるようにします。

facade/ignition-tinker-tab がインストールされていると、エラー ページで Artisan tinker を使用できます。

Tinker 选项卡

facade/ignition-code-editor という 2 番目のパッケージも作成しました。このタブは、デフォルトのスタック トレース タブを、エラー画面でコードを編集できるカスタム タブに置き換えます。これが何をするかです。

1 つの記事で Laravel Ignition についてすべてが紹介されています

カスタム タブを追加する方法については、タブの追加に関するドキュメントを参照してください。

関連する推奨事項:最新の 5 つの 1 つの記事で Laravel Ignition についてすべてが紹介されています ビデオ チュートリアル

#元のアドレス:https://freek.dev/1441-ignition-a-new-error-page-for-laravel

翻訳アドレス:https://freek.dev/1441-ignition-a-new-error-page-for-laravel ://learnku.com/laravel/t/33857

以上が1 つの記事で Laravel Ignition についてすべてが紹介されていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。