<?php
namespace Spatie\Ignition\ErrorPage;
use Spatie\FlareClient\Report;
use Spatie\FlareClient\Truncation\ReportTrimmer;
use Spatie\Ignition\Config\IgnitionConfig;
use Spatie\Ignition\Contracts\Solution;
use Spatie\Ignition\Solutions\SolutionTransformer;
use Throwable;
class ErrorPageViewModel
{
/**
* @param \Throwable|null $throwable
* @param \Spatie\Ignition\Config\IgnitionConfig $ignitionConfig
* @param \Spatie\FlareClient\Report $report
* @param array<int, Solution> $solutions
* @param string|null $solutionTransformerClass
*/
public function __construct(
protected ?Throwable $throwable,
protected IgnitionConfig $ignitionConfig,
protected Report $report,
protected array $solutions,
protected ?string $solutionTransformerClass = null,
protected string $customHtmlHead = '',
protected string $customHtmlBody = ''
) {
$this->solutionTransformerClass ??= SolutionTransformer::class;
}
public function throwableString(): string
{
if (! $this->throwable) {
return '';
}
$throwableString = sprintf(
"%s: %s in file %s on line %d\n\n%s\n",
get_class($this->throwable),
$this->throwable->getMessage(),
$this->throwable->getFile(),
$this->throwable->getLine(),
$this->report->getThrowable()?->getTraceAsString()
);
return htmlspecialchars($throwableString);
}
public function title(): string
{
return htmlspecialchars($this->report->getMessage());
}
/**
* @return array<string, mixed>
*/
public function config(): array
{
return $this->ignitionConfig->toArray();
}
public function theme(): string
{
return $this->config()['theme'] ?? 'auto';
}
/**
* @return array<int, mixed>
*/
public function solutions(): array
{
return array_map(function (Solution $solution) {
/** @var class-string $transformerClass */
$transformerClass = $this->solutionTransformerClass;
/** @var SolutionTransformer $transformer */
$transformer = new $transformerClass($solution);
return ($transformer)->toArray();
}, $this->solutions);
}
/**
* @return array<string, mixed>
*/
public function report(): array
{
return $this->report->toArray();
}
public function jsonEncode(mixed $data): string
{
$jsonOptions = JSON_PARTIAL_OUTPUT_ON_ERROR | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT;
return (string) json_encode($data, $jsonOptions);
}
public function getAssetContents(string $asset): string
{
$assetPath = __DIR__."/../../resources/compiled/{$asset}";
return (string) file_get_contents($assetPath);
}
/**
* @return array<int|string, mixed>
*/
public function shareableReport(): array
{
return (new ReportTrimmer())->trim($this->report());
}
public function updateConfigEndpoint(): string
{
// TODO: Should be based on Ignition config
return '/_ignition/update-config';
}
public function customHtmlHead(): string
{
return $this->customHtmlHead;
}
public function customHtmlBody(): string
{
return $this->customHtmlBody;
}
}
How To Payment
Making a payment on our website is quick and secure. Start by logging in or creating an account. Select your preferred payment method, input the required details, and review the information. Once you confirm everything is correct, click on the "Submit Payment" button. You’ll receive instant confirmation and can track your payment status through your account dashboard. It’s an easy and secure process.