Dans cet article de blog, je vais tout vous dire sur Ignition.
Voyons ce qui est disponible par défaut en PHP. PHP fournit cette fonctionnalité sans utiliser de framework. Vous obtenez simplement des erreurs : aucune trace de pile, aucun détail de demande ou d’application.
La page d'erreur de Symfony est légèrement meilleure, elle vous montre la trace de la pile, mais elle n'est pas d'une grande aide.
La capture d'écran ci-dessous provient de Whoops, qui est standard dans Un article présente tout sur Laravel Ignition 5. C'est bien mieux que Symfony par défaut et peut afficher des traces de pile et des informations sur la requête. Bien que Whoops soit la valeur par défaut dans Un article présente tout sur Laravel Ignition, il est indépendant du framework (affichage de la collection d'erreurs). Il affiche uniquement des informations générales.
Ceci est une capture d'écran d'Ignition, la nouvelle vue d'erreur que nous avons créée. Comme c'est spécifique à Un article présente tout sur Laravel Ignition, nous pouvons faire beaucoup de choses sympas.
Explorons Ignition dans tous ses détails. C'est open source et vous pouvez voir le code ici (https://github.com/facade/ignition).
S'il y a des erreurs dans la vue, voici comment whoops les affiche. Notez que le message d'exception ne rentre pas dans l'espace alloué. Il faut passer la souris dessus pour voir l'intégralité des informations. Dans la trace de la pile, vous pouvez voir que les vues et le contenu Blade compilés sont utilisés. Cela rend difficile le suivi des fichiers de vue Blade contenant des erreurs et le contenu de la vue lui-même est illisible.
Ignition est une page d'erreur spécifique à Un article présente tout sur Laravel Ignition. Par conséquent, il peut être « accroché » au framework comme un hook et utilisé pour exposer les chemins de vue non compilés et vos vues Blade. Il y a également suffisamment d'espace en haut pour afficher l'intégralité de la page d'exception sans nécessiter de clics supplémentaires. Nous affichons également uniquement les cadres d'application par défaut, car ce sont peut-être ceux qui vous intéressent.
Si vous cliquez sur l'icône en forme de crayon à côté du nom du fichier à droite de l'onglet stack trace
, nous ouvrirons automatiquement le fichier dans votre éditeur préféré. La valeur par défaut est PhpStorm. Vous pouvez le configurer comme votre éditeur préféré dans le fichier de configuration ignition
.
Remarquez ce petit lien « Télescope » dans le coin supérieur droit ? Nous ne l'affichons que si vous avez installé Un article présente tout sur Laravel Ignition Telescope (un assistant de débogage propriétaire). Si vous cliquez sur ce lien, vous serez redirigé vers une exception où quelque chose s'est mal passé dans le télescope.
Si notre écran d'erreur par défaut est trop lumineux, vous serez heureux de savoir que nos pages d'erreur disposent également d'un mode sombre.
Explorons les Ignition
onglets affichés sur la page.
À côté de l'onglet Stack Trace, vous verrez l'onglet Requêtes. Il affiche toutes les informations attendues pour votre demande.
Supposons que vous ayez une définition de route comme celle-ci ::
Route::get('/posts/{post}', function (Post $post) { // });
Lorsqu'une exception se produit sur cette route, nous imprimerons le paramètre de route post
modèle ($post
variable) dans Ignition, et le présenterons sous la forme d'un tableau converti (toArray
). Il en va de même pour les paramètres de route « simples » qui ne nécessitent aucune liaison. C'est un excellent moyen de voir facilement quelles informations Un article présente tout sur Laravel Ignition reçoit pour cet itinéraire spécifique.
Après les paramètres de route, nous vous montrerons également la liste des middlewares utilisés dans cette requête.
Vient ensuite la section « Affichage ». Si l'exception se produit dans une vue, nous afficherons ici le nom de la vue. Encore plus : nous donnerons également une liste de toutes les données transmises à la vue.
"用户" 选项卡包含有使用应用程序的用户和浏览器的更多信息。
在 Context
选项卡中,我们显示关于您的 repo
(repo位于何处,签出提交hash)和环境(您使用的 PHP 和 Un article présente tout sur Laravel Ignition 的哪个版本)的信息。
在 Debug
选项卡中,我们将显示异常发生之前发生的事情。比如查询、日志和转储。在转储旁边,我们还显示您将 dump
语句放在何处的文件名。单击铅笔图标,您就可以直接访问该文件,并在您最喜欢的编辑器中纠正行号。
让我们来看一下另一个错误。这次我们将忘记导入 Class。Ignition 报错页面是这样的。
所以,Ignition 在看到异常是关于一个没有找到的 Class 时。它将尝试找出在其他命名空间中是否存在这个 Class。如果存在的话,它会建议我们导入。
Ignition 自带一系列常见问题的解决方案。若没有找到Blade视图,会采用一个Un article présente tout sur Un article présente tout sur 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 中抛出异常的样子。
除了仅仅是建议的解决方案,我们也可以运行它们。想象一下,例如,您忘记设置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 具有可扩展性。您可以添加新选项卡或替换默认选项卡。
Jetons un coup d'œil à l'onglet façade/allumage-bricoleur fourni. Ce package est un wrapper basé sur spatie/laravel-web-tinker qui vous permet de l'utiliser dans le navigateur Artisan tinker
.
Avec l'onglet façade/allumage-tinker-tab installé, vous pouvez l'utiliser sur les pages d'erreurArtisan tinker
.
Nous avons également créé un deuxième package appelé Façade/Ignition-Code-Editor. Cet onglet remplace l'onglet de trace de pile par défaut par un onglet personnalisé qui vous permet de modifier le code sur l'écran d'erreur. Voici ce que cela fait.
Si vous souhaitez apprendre à ajouter des onglets personnalisés, veuillez consulter la documentation sur l'ajout d'onglets.
Recommandations associées : Les cinq derniers didacticiels vidéo Un article présente tout sur Laravel Ignition
Adresse originale : https://freek. dev /1441-ignition-a-new-error-page-for-laravel
Adresse de traduction : https://learnku.com/laravel/t/33857
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!