Heim > Artikel > PHP-Framework > Ein Artikel stellt alles über Laravel Ignition vor
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.
Symfonys Fehlerseite ist etwas besser, sie zeigt Ihnen den Stack-Trace, aber es hilft nicht viel.
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.
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.
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.
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.
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(第一方调试助手)的情况下显示。如果你点击那个链接,你将被带到望远镜内发生错误的异常。
如果我们默认的错误屏幕太亮了,你会很高兴知道我们的错误页面也有一个黑暗模式。
让我们探索一下 Ignition
页面上显示的选项卡。
在「堆栈跟踪」选项卡旁边,您将看到「请求」选项卡。它显示了您对请求的所有预期信息。
假设你有一个路由定义是这样的::
Route::get('/posts/{post}', function (Post $post) { // });
当此路由发生异常,我们将在 Ignition 中打印 路由参数 post
模型($post
变量),以转化后数组(toArray
Zündung
angezeigt werden. 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🎜🎜🎜🎜"用户" 选项卡包含有使用应用程序的用户和浏览器的更多信息。
在 Context
选项卡中,我们显示关于您的 repo
(repo位于何处,签出提交hash)和环境(您使用的 PHP 和 Ein Artikel stellt alles über Laravel Ignition vor 的哪个版本)的信息。
在 Debug
选项卡中,我们将显示异常发生之前发生的事情。比如查询、日志和转储。在转储旁边,我们还显示您将 dump
语句放在何处的文件名。单击铅笔图标,您就可以直接访问该文件,并在您最喜欢的编辑器中纠正行号。
让我们来看一下另一个错误。这次我们将忘记导入 Class。Ignition 报错页面是这样的。
所以,Ignition 在看到异常是关于一个没有找到的 Class 时。它将尝试找出在其他命名空间中是否存在这个 Class。如果存在的话,它会建议我们导入。
Ignition 自带一系列常见问题的解决方案。若没有找到Blade视图,会采用一个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 中抛出异常的样子。
除了仅仅是建议的解决方案,我们也可以运行它们。想象一下,例如,您忘记设置app key
。这是用 Ignition 展示错误的样子。
如果你点击“生成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
的样子.
当用户点击Fix this for me
修复按钮时,run
函数将执行。
您可以将参数从异常发生的请求传递到将运行解决方案的请求。让getRunParameters
返回一个数组。该数组将被传递给 run
。
因此,你有能力使用文本或者可运行的解决方案来增强自己的异常。 但有时需要为内置的 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 具有可扩展性。您可以添加新选项卡或替换默认选项卡。
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
Artisan tinker
auf Fehlerseiten verwenden.
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.
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!