>PHP 프레임워크 >Laravel >Laravel Ignition에 대한 모든 것을 소개하는 기사 하나

Laravel Ignition에 대한 모든 것을 소개하는 기사 하나

藏色散人
藏色散人앞으로
2021-07-09 11:48:492252검색

이번 블로그 포스팅에서는 이그니션에 대한 모든 것을 알려드리겠습니다.

PHP에 기본적으로 무엇이 포함되어 있는지 살펴보겠습니다. PHP는 프레임워크를 사용하지 않고 이 기능을 제공합니다. 오류만 발생합니다. 스택 추적도 없고 요청이나 애플리케이션 세부정보도 없습니다.
PHP 错误

Symfony의 오류 페이지는 스택 추적을 보여주지만 약간 더 나아졌으나 별로 도움이 되지 않습니다.

Symfony 错误

아래 스크린샷은 Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 5의 표준인 Whoops에서 가져온 것입니다. 기본 Symfony보다 훨씬 뛰어나며 스택 추적과 요청에 대한 일부 정보를 표시할 수 있습니다. Whoops는 Laravel Ignition에 대한 모든 것을 소개하는 기사 하나의 기본값이지만 프레임워크에 구애받지 않습니다(오류 수집 표시). 일반 정보만 표시됩니다.

Whoops 错误

저희가 만든 새로운 오류 뷰인 Ignition의 스크린샷입니다. 이것은 Laravel Ignition에 대한 모든 것을 소개하는 기사 하나에만 국한된 것이므로 우리는 많은 멋진 작업을 수행할 수 있습니다.

Ignition 错误

Ignition 알아보기

Ignition에 대해 자세히 알아보세요. 오픈 소스이며 여기(https://github.com/facade/ignition)에서 코드를 볼 수 있습니다.

뷰에 오류가 있으면 앗싸가 표시하는 방법입니다. 예외 메시지는 할당된 공간에 맞지 않습니다. 전체(정보)를 보려면 해당 항목 위로 마우스를 가져가야 합니다. 스택 트레이스를 보면 컴파일된 블레이드 뷰와 컨텐츠가 사용된 것을 확인할 수 있습니다. 이로 인해 어떤 블레이드 보기 파일에 오류가 포함되어 있는지 추적하기 어렵고 보기 내용 자체를 읽을 수 없습니다.

Whoops 视图错误

Ignition은 Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 특정 오류 페이지입니다. 따라서 후크처럼 프레임워크에 "연결"되어 컴파일되지 않은 보기 경로와 블레이드 보기를 노출하는 데 사용될 수 있습니다. 또한 상단에는 추가 클릭 없이 전체 예외 페이지를 표시할 수 있는 충분한 공간이 있습니다. 또한 관심 있는 프레임일 수 있으므로 기본적으로 애플리케이션 프레임만 표시합니다.

Ignition 视图错误

스택 추적 탭 오른쪽 파일 이름 옆의 연필 아이콘을 클릭하면 즐겨 사용하는 편집기에서 파일이 자동으로 열립니다. 기본값은 PhpStorm입니다. ignition 구성 파일에서 즐겨 사용하는 편집기로 구성할 수 있습니다. stack trace 选项卡右侧文件名旁边的铅笔图标,我们将在您喜欢的编辑器中自动打开该文件。默认情况下是 PhpStorm 。您可以在 ignition 配置文件中将其配置为您最喜欢的编辑器。

注意到右上角的那个小“望远镜”链接了吗?我们只会在您安装了Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 Telescope(第一方调试助手)的情况下显示。如果你点击那个链接,你将被带到望远镜内发生错误的异常。

黑暗模式

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

Dark mode

Ignition 选项卡

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

「请求」选项卡

Request tab

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

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

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

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

오른쪽 상단에 있는 작은 "Telescope" 링크에 주목하세요. Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 Telescope(자사 디버깅 보조 프로그램)가 설치된 경우에만 표시됩니다. 해당 링크를 클릭하면 망원경 내에서 문제가 발생하는 예외가 발생합니다.

다크 모드

기본 오류 화면이 너무 밝다면 오류 페이지에도 다크 모드가 있다는 사실을 알게 되어 기쁠 것입니다.

어두운 모드

User tab점화 탭

🎜을 살펴보겠습니다. 점화 페이지에 표시되는 탭입니다. 🎜🎜"요청" 탭🎜🎜요청 탭🎜🎜 다음 스택 추적 탭에 요청 탭이 표시됩니다. 여기에는 귀하의 요청에 대해 예상되는 모든 정보가 표시됩니다. 🎜🎜다음과 같은 경로 정의가 있다고 가정해 보겠습니다.:🎜
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 post 모델($post)에서 경로 매개변수를 인쇄합니다. > 변수), 변환된 배열(toArray) 형식으로 표시됩니다. 바인딩이 필요하지 않은 "단순" 경로 매개변수의 경우에도 마찬가지입니다. 이는 Laravel Ignition에 대한 모든 것을 소개하는 기사 하나이 특정 경로에 대해 어떤 정보를 받고 있는지 쉽게 확인할 수 있는 좋은 방법입니다. 🎜🎜경로 매개변수 다음에는 이 요청에 사용된 미들웨어 목록도 표시됩니다. 🎜🎜다음은 "보기" 섹션입니다. 보기에서 예외가 발생하면 여기에 보기 이름이 표시됩니다. 게다가 뷰에 전달된 모든 데이터 목록도 제공합니다. 🎜🎜사용자 탭🎜🎜🎜🎜

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

Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 Ignition에 대한 모든 것을 소개하는 기사 하나

Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 Ignition에 대한 모든 것을 소개하는 기사 하나

Context  选项卡中,我们显示关于您的  repo  (repo位于何处,签出提交hash)和环境(您使用的 PHP 和 Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 的哪个版本)的信息。

Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 Ignition에 대한 모든 것을 소개하는 기사 하나

Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 Ignition에 대한 모든 것을 소개하는 기사 하나

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

建议的解决方案

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

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

Ignition 自带一系列常见问题的解决方案。若没有找到Blade视图,会采用一个Laravel Ignition에 대한 모든 것을 소개하는 기사 하나 Ignition에 대한 모든 것을 소개하는 기사 하나如下所示。

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 中抛出异常的样子。

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 的样子.

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을 살펴보겠습니다. 이 패키지는 브라우저에서 Artisan Tinker를 사용할 수 있게 해주는 spatie/laravel-web-tinker 기반 래퍼입니다. Artisan tinker

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

façade/ignition-tinker-tab을 설치하면 오류 페이지에서 Artisan Tinker를 사용할 수 있습니다.

Tinker 选项卡

façade/ignition-code-editor라는 두 번째 패키지도 만들었습니다. 이 탭은 기본 스택 추적 탭을 오류 화면에서 코드를 편집할 수 있는 사용자 정의 탭으로 대체합니다. 그 기능은 다음과 같습니다.

Laravel Ignition에 대한 모든 것을 소개하는 기사 하나

사용자 정의 탭을 추가하는 방법을 알아보려면 탭 추가에 대한 설명서를 방문하세요.
관련 권장 사항: 라라벨 최신 5개 비디오 튜토리얼

원본 주소: https://freek. dev /1441-ignition-a-new-error-page-for-laravel

번역 주소: https://learnku.com/laravel/t/33857
🎜

위 내용은 Laravel Ignition에 대한 모든 것을 소개하는 기사 하나의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제