A beautiful error page for PHP apps

Overview

DO NOT USE YET, THIS PACKAGE IS IN DEVELOPMENT

Ignition: a beautiful error page for PHP apps

Latest Version on Packagist Tests Total Downloads

Ignition is a beautiful and customizable error page for PHP applications

Screenshot of ignition

Here's a minimal example.

use Spatie\Ignition\Ignition;

include 'vendor/autoload.php';

Ignition::make()->register();

throw new Exception('Bye world');

Support us

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.

Installation

You can install the package via composer:

composer require spatie/ignition

Usage

In order display the Ignition error page when an error occurs in your project, you must add this code. Typically, this would be done in the bootstrap part of your application.

\Spatie\Ignition\Ignition::make()->register();

Setting the application path

When setting the application path, Ignition will trim the given value from all paths. This will make the error page look more cleaner.

\Spatie\Ignition\Ignition::make()
    ->applicationPath($basePathOfYourApplication)
    ->register();

Using dark mode

By default, Ignition uses a nice white based them. If this is too bright for your eyes, you can use dark mode.

\Spatie\Ignition\Ignition::make()
    ->useDarkMode()
    ->register();

Avoid rendering Ignition in a production environment

You don't want to render the Ignition error page in a production environment, as it potentially can display sensitive information.

To avoid rendering Ignition, you can call shouldDisplayException and pass it a falsy value.

\Spatie\Ignition\Ignition::make()
    ->shouldDisplayException($inLocalEnvironment)
    ->register();

Displaying solutions

In addition to displaying an exception, Ignition can display a solution as well.

Out of the box, Ignition will display solutions for common errors such as bad methods calls, or using undefined properties.

Adding a solution directly to an exception

To add a solution text to your exception, let the exception implement the Spatie\IgnitionContracts\ProvidesSolution interface.

This interface requires you to implement one method, which is going to return the Solution that users will see when the exception gets thrown.

use Spatie\IgnitionContracts\Solution;
use Spatie\IgnitionContracts\ProvidesSolution;

class CustomException implements ProvidesSolution
{
    public function getSolution(): Solution
    {
        return new CustomSolution();
    }
}
use Spatie\IgnitionContracts\Solution;

class CustomSolution implements Solution
{
    public function getSolutionTitle(): string
    {
        return 'The solution title goes here';
    }

    public function getSolutionDescription(): string
    {
        return 'This is a longer description of the solution that you want to show.';
    }

    public function getDocumentationLinks(): array
    {
        return [
            'Your documentation' => 'https://your-project.com/relevant-docs-page',
        ];
    }
}

This is how the exception would be displayed if you were to throw it.

TODO: insert image

Using solution providers

Instead of adding solutions to exceptions directly, you can also create a solution provider. While exceptions that return a solution, provide the solution directly to Ignition, a solution provider allows you to figure out if an exception can be solved.

For example, you could create a custom "Stack Overflow solution provider", that will look up if a solution can be found for a given throwable.

Solution providers can be added by third party packages or within your own application.

A solution provider is any class that implements the \Spatie\IgnitionContracts\HasSolutionsForThrowable interface.

This is how the interface looks like:

interface HasSolutionsForThrowable
{
    public function canSolve(Throwable $throwable): bool;

    /** \Facade\IgnitionContracts\Solution[] */
    public function getSolutions(Throwable $throwable): array;
}

When an error occurs in your app, the class will receive the Throwable in the canSolve method. In that method you can decide if your solution provider is applicable to the Throwable passed. If you return true, getSolutions will get called.

To register a solution provider to Ignition you must call the addSolutionProviders method.

\Spatie\Ignition\Ignition::make()
    ->addSolutionProviders([
        YourSolutionProvider::class,
        AnotherSolutionProvider::class,
    ])
    ->register();

Sending exceptions to Flare

Ignition comes the ability to send exceptions to Flare, an exception monitoring service. Flare can notify you when new exceptions are occurring in your production environment.

To send exceptions to Flare, simply call the sendToFlareMethod and pass it the API key you got when creating a project on Flare.

You probably want to combine this with calling runningInProductionEnvironment. That method will, when passed a truthy value, not display the Ignition error page, but only send the exception to Flare.

\Spatie\Ignition\Ignition::make()
    ->runningInProductionEnvironment($boolean)
    ->sendToFlare($yourApiKey)
    ->register();

When you pass a falsy value to runningInProductionEnvironment, the Ignition error page will get shown, but no exceptions will be sent to Flare.

Sending custom context to Flare

When you send an error to Flare, you can add custom information that will be sent along with every exception that happens in your application. This can be very useful if you want to provide key-value related information that furthermore helps you to debug a possible exception.

use Spatie\FlareClient\Flare;

\Spatie\Ignition\Ignition::make()
    ->runningInProductionEnvironment($boolean)
    ->sendToFlare($yourApiKey)
    ->configureFlare(function(Flare  $flare) {
        $flare->context('Tenant', 'My-Tenant-Identifier');
    })
    ->register();

Sometimes you may want to group your context items by a key that you provide to have an easier visual differentiation when you look at your custom context items.

The Flare client allows you to also provide your own custom context groups like this:

use Spatie\FlareClient\Flare;

\Spatie\Ignition\Ignition::make()
    ->runningInProductionEnvironment($boolean)
    ->sendToFlare($yourApiKey)
    ->configureFlare(function(Flare  $flare) {
        $flare->group('Custom information', [
            'key' => 'value',
            'another key' => 'another value',
        ]);
    })
    ->register();

Anonymize request to Flare

By default, the Ignition collects information about the IP address of your application users. If you want don't want to send this information to Flare, call anonymizeIp().

use Spatie\FlareClient\Flare;

\Spatie\Ignition\Ignition::make()
    ->runningInProductionEnvironment($boolean)
    ->sendToFlare($yourApiKey)
    ->configureFlare(function(Flare  $flare) {
        $flare->anonymizeIp();
    })
    ->register();

Censoring request body fields

When an exception occurs in a web request, the Flare client will pass on any request fields that are present in the body.

In some cases, such as a login page, these request fields may contain a password that you don't want to send to Flare.

To censor out values of certain fields, you can use call censorRequestBodyFields. You should pass it the names of the fields you wish to censor.

use Spatie\FlareClient\Flare;

\Spatie\Ignition\Ignition::make()
    ->runningInProductionEnvironment($boolean)
    ->sendToFlare($yourApiKey)
    ->configureFlare(function(Flare  $flare) {
        $flare->censorRequestBodyFields(['password']);
    })
    ->register();

This will replace the value of any sent fields named "password" with the value "".

Using middleware to modify data sent to Flare

Before Flare receives the data that was collected from your local exception, we give you the ability to call custom middleware methods. These methods retrieve the report that should be sent to Flare and allow you to add custom information to that report.

A valid middleware is any class that implements FlareMiddleware.

use Spatie\FlareClient\Report;

use Spatie\FlareClient\FlareMiddleware\FlareMiddleware;

class MyMiddleware implements FlareMiddleware
{
    public function handle(Report $report, Closure $next)
    {
        $report->message("{$report->getMessage()}, now modified");

        return $next($report);
    }
}
use Spatie\FlareClient\Flare;

\Spatie\Ignition\Ignition::make()
    ->runningInProductionEnvironment($boolean)
    ->sendToFlare($yourApiKey)
    ->configureFlare(function(Flare  $flare) {
        $flare->registerMiddleware([
            MyMiddleware::class,
        ])
    })
    ->register();

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.

Comments
  • Fixed Symfony error page

    Fixed Symfony error page

    This PR fixes the Symfony error page shown within Ignition, as occurring in issue #48.

    This solution is most likely not how you want to solve this issue, but in that case, this can at least point you in the right direction.

    I hope it helps :)

    opened by jazerix 9
  • Cannot pass instances of ProvidesSolution to SolutionProviderRepository::registerSolutionProviders

    Cannot pass instances of ProvidesSolution to SolutionProviderRepository::registerSolutionProviders

    According to the SolutionProviderRepository contract, it should be possible to pass instances or class strings to registerSolutionProviders, but only class strings are supported by the contract implementation.

    opened by DieterHolvoet 8
  • spatie/ignition default config outside of appdir open_basedir issue

    spatie/ignition default config outside of appdir open_basedir issue

    Hello there,

    This issue seems to be caused by spatie/ignition package.

    Steps to reproduce:

    1. Have a Laravel 8.xx app and open_basedir restrictions set to the application directory
    2. replace facade/ignition with spatie/laravel-ignition

    I can confirm that homedir being the default path causes the issue after changing the default path to base_path everything works normally.

    This can cause problems with the upcoming Laravel 9 release, as there it is the default.

    cheers

    opened by dianfishekqi 7
  • Interface incompatibility in 1.4.0

    Interface incompatibility in 1.4.0

    Hi there. Just updated to 1.4.0, got this error message:

    PHP Fatal error: Declaration of Spatie\LaravelIgnition\Solutions\SolutionProviders\SolutionProviderRepository::registerSolutionProvider(string $solutionProviderClass): Spatie\Ignition\Contracts\SolutionProviderRepository must be compatible with Spatie\Ignition\Contracts\SolutionProviderRepository::registerSolutionProvider(Spatie\Ignition\Contracts\HasSolutionsForThrowable|string $solutionProvider): Spatie\Ignition\Contracts\SolutionProviderRepository in .../vendor/spatie/laravel-ignition/src/Solutions/SolutionProviders/SolutionProviderRepository.php on line 24

    I guess there is just a small thing that needs to be updated. Leaving the issue here for further discussion.

    opened by mvisd 5
  • TypeError: Cannot read properties of undefined (reading 'laravel_version')

    TypeError: Cannot read properties of undefined (reading 'laravel_version')

    Please include some context and the contents of the console in your browser's developer tools.

    image

    I'm running spatie/ignition in TYPO3 CMS which worked just perfectly fine. I've performt an update of few packages via composer, will try to undo the update and comment here the results.

    JavaScript Error

    TypeError: Cannot read properties of undefined (reading 'laravel_version')
        at https://ze.ddev.site/:174:282166
        at kv (https://ze.ddev.site/:174:282562)
        at Ef (https://ze.ddev.site/:170:186618)
        at https://ze.ddev.site/:170:221150
        at vp (https://ze.ddev.site/:170:222502)
        at HTMLUnknownElement.v (https://ze.ddev.site/:170:103604)
        at Object.Bn (https://ze.ddev.site/:170:103929)
        at qn (https://ze.ddev.site/:170:104890)
        at xh (https://ze.ddev.site/:170:270689)
        at uh (https://ze.ddev.site/:170:261914)
    

    Reproduction Steps

    Please tell us what you were doing when this error occurred, so we can more easily debug it and find a solution.

    I was actually just writing some PHP code (see below) - when the error/exception occurred - and used symfony/var-dumper dd() function:

    $normalizedParams = $request->getAttribute('normalizedParams');
    $uri = $normalizedParams->getRequestUri();
    dd($uri);
    

    User Agent

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36
    
    opened by iammati 5
  • The possibility to specify a path to the settings file

    The possibility to specify a path to the settings file

    This is a continuation of the #41. This modified solution is reworked by taking into account suggestions and some new ideas:

    • Maybe we can rename this to CONFIG_FILE_NAME to keep it in line with the ConfigManager, etc... Because I haven’t received any feedback on my explanations in #41 about my decision, I would like to stick to this naming for now.
    • For most OSS package we avoid private for all properties and functions I changed the visibility for all the methods which look worth being inherited.
    • Explicitly importing Throwable is more in line with Laravel's codebase Done for all the cases.
    • createSource might be a bit vague. Maybe we can rename it to something a bit more explicit? The interface of the ConfigManager was change to:
      - load() 
      - save()
      - createPersistent() // can be safely removed if it seems a good idea not to expose it << was removed
      - getPersistentInfo()
    

    , that looks better to me and more self-explantory

    • Also, what do you think about calling this method from the save() method? Done. The FileConfigManager uses a new flow. It creates a file at the initialization moment (createFile()) and retains two states ($path, $file) for the future use. ~~That way it is not still necessary to create a persistent storage somewhere else (that's why createPersistent() method could be removed from the public Interface if it seems a good idea).~~ The createPersistent was removed from the public interface.
    • Interesting approach! The approach turned out a big failure when I had tried to update laravel-ignition with this package. So, the solution was rethought and modified. Now, it should work without any possible issues.
    • Can this call be moved to inside of the $manager->save() method? Done. It was mentioned above.
    • I don't think these doc block typehints add a lot Because I haven’t received any feedback I left them as is.

    Besides these refinements, I have finished a branch with the integration of these changes to the laravel-ignition. I haven't made a PR yet, because the branch uses a non-standard composer.json (with the modified version of spatie/ignition). @AlexVanderbist @freekmurze Could you please give it a look?

    As an afterthought, I would like to propose to extract the functionality based on user's home directory (everything under the initPathFromEnvironment() method) to another class. It's not really crucial, but it is obviously sort of my fault because it breask SRP. It seems these (use predefined filename vs use the dynamically retrieved user home directory) are two different responsibilities with different functionality (works per project vs works for all the projects). So, it is better to do in the future.

    opened by kudashevs 5
  • The possibility to specify a path to the settings file

    The possibility to specify a path to the settings file

    Hello again :wave:,

    This is a draft PR of the first step of a proposition to the laravel-ignition.

    This is a new component FileConfigManager which is implemented through a new ConfigManager interface. The interface is a little bit over-engineered with the getSource method, however, I've found it useful for testing purposes and it could be useful in the future (but it could be removed, though). So, the new FileConfigManager gets all the responsibility to manage the settings file:

    • it accepts a path through the constructor and validates it
    • if the path is not provided it tries to find an appropriate path from the environment (was taken from DefaultConfigFinder)
    • it can load the options from a file
    • it can save the options to the file
    • it can create the file (and this seems the most important because DefaultConfigFinder didn't do that, so DefaultConfigFinderTest didn't work properly for me if I didn't have a created settings file)
    • it is covered with tests in some weak points
    opened by kudashevs 5
  • PHPUnit to Pest Converter

    PHPUnit to Pest Converter

    This pull request contains changes for migrating your test suite from PHPUnit to Pest automated by the Pest Converter.

    Before merging, you need to:

    • Checkout the shift-52829 branch
    • Review all of the comments below for additional changes
    • Run composer update to install Pest with your dependencies
    • Run vendor/bin/pest to verify the conversion
    opened by freekmurze 5
  • TypeError: Cannot read properties of undefined (reading 'code_snippet')

    TypeError: Cannot read properties of undefined (reading 'code_snippet')

        $product = $request->all();
        
        $file = $request->file('file');
        
        if ($file) {
            $filename = time().'products.'.$file->getClientOriginalExtension();
            $extension = $file -> getClientOriginalExtension();
            $tempPath = $file -> getRealPath();
            $fileSize = $file -> getSize();
            $location = public_path('uploads');
            $file -> move($location, $filename);
            $filepath = $location."/".$filename;
            
            $csvFile = fopen($filepath, 'r');
            $line = fgetcsv($csvFile);
            
            while($line !== FALSE){
                
                $data = array(
                    'name' => $line[1],
                    'url' => $line[2],
                    'description' => $line[3],
                    'short_desc' => $line[4],
                    'price' => $line[5],
                    'old_price' => $line[6],
                    'date_range' => $line[7],
                    'stock' => $line[8],
                    'qty' => $line[9],
                    'main_img' => $line[10],
                    'alt_img1' => $line[11],
                    'alt_img2' => $line[12],
                    'alt_img3' => $line[13],
                    'alt_img4' => $line[14],
                    'main_img_alt_tag' => $line[15],
                    'alt_img1_alt_tag' => $line[16],
                    'alt_img2_alt_tag' => $line[17],
                    'alt_img3_alt_tag' => $line[18],
                    'alt_img4_alt_tag' => $line[19],
                    'visibility' => $line[20],
                    'publish_date' => $line[21],
                    'category' => $line[22],
                    'tag' => $line[23],
                    'page_title' => $line[24],
                    'meta_desc' => $line[25],
                    'created_at' => now()->toDateTimeString(),
                );
                
                
                DB::table("products")->insert($data);
            }
            dd($line);
            // Close opened CSV file
            fclose($csvFile);
            
            return redirect('product')->with('success','Data Inserted Successfully');
    
    TypeError: Cannot read properties of undefined (reading 'code_snippet')
        at XE (https://version.0.1.1clx.com/product/importstore:52:249981)
        at mi (https://version.0.1.1clx.com/product/importstore:52:70706)
        at Ql (https://version.0.1.1clx.com/product/importstore:52:122308)
        at xc (https://version.0.1.1clx.com/product/importstore:52:109797)
        at _c (https://version.0.1.1clx.com/product/importstore:52:109725)
        at Cc (https://version.0.1.1clx.com/product/importstore:52:109588)
        at Nc (https://version.0.1.1clx.com/product/importstore:52:106582)
        at hc (https://version.0.1.1clx.com/product/importstore:52:103958)
        at nu (https://version.0.1.1clx.com/product/importstore:52:119816)
        at https://version.0.1.1clx.com/product/importstore:52:121187
    

    User Agent

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36
    
    opened by kaviphp 4
  • Error: Minified React error

    Error: Minified React error

    Ignition error page displays fine but if I click on any link or mouse up, I get the error:

    Something went wrong in Ignition! An error occurred in Ignition's UI. Please open an issue on [the Ignition GitHub repo] and make sure to include any errors or warnings in the developer console.

    image

    opened by ebiboy2 4
  • TypeError: Cannot read properties of undefined (reading 'code_snippet')

    TypeError: Cannot read properties of undefined (reading 'code_snippet')

    Something went wrong in Ignition!

    An error occurred in Ignition's UI. Please open an issue on [the Ignition GitHub repo] and make sure to include any errors or warnings in the developer console.

    Screenshot 2022-03-03 at 10 36 08

    TypeError: Cannot read properties of undefined (reading 'code_snippet')
        at XE (http://192.168.0.159:8001/login:52:249981)
        at mi (http://192.168.0.159:8001/login:52:70706)
        at Ql (http://192.168.0.159:8001/login:52:122308)
        at xc (http://192.168.0.159:8001/login:52:109797)
        at _c (http://192.168.0.159:8001/login:52:109725)
        at Cc (http://192.168.0.159:8001/login:52:109588)
        at Nc (http://192.168.0.159:8001/login:52:106582)
        at hc (http://192.168.0.159:8001/login:52:103958)
        at nu (http://192.168.0.159:8001/login:52:119816)
        at http://192.168.0.159:8001/login:52:121187
    

    User Agent

    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36
    
    opened by acgtwentyone 4
  • NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

    NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

    Please include some context and the contents of the console in your browser's developer tools.

    JavaScript Error

    Error: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
        at yl (http://127.0.0.1:8000/:143:141704)
        at Xp (http://127.0.0.1:8000/:143:251719)
        at Kp (http://127.0.0.1:8000/:143:252080)
        at gh (http://127.0.0.1:8000/:143:267692)
        at HTMLUnknownElement.v (http://127.0.0.1:8000/:143:103631)
        at Object.Bn (http://127.0.0.1:8000/:143:103956)
        at qn (http://127.0.0.1:8000/:143:104917)
        at mh (http://127.0.0.1:8000/:143:265326)
        at t.unstable_runWithPriority (http://127.0.0.1:8000/:143:38304)
        at Ws (http://127.0.0.1:8000/:143:148134)
    

    Reproduction Steps

    Please tell us what you were doing when this error occurred, so we can more easily debug it and find a solution.

    User Agent

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
    
    opened by Abraham0323 0
  • TypeError: Cannot read properties of undefined (reading 'slice')

    TypeError: Cannot read properties of undefined (reading 'slice')

    Please include some context and the contents of the console in your browser's developer tools.

    JavaScript Error

    TypeError: Cannot read properties of undefined (reading 'slice')
        at parseKey (<anonymous>:7:45034)
        at e.value (<anonymous>:7:45661)
        at e.value (<anonymous>:7:44927)
        at e.value (<anonymous>:7:44749)
        at e.value (<anonymous>:7:43733)
        at e.value (<anonymous>:7:43379)
        at m.value (<anonymous>:7:33335)
        at t.format (<anonymous>:7:105466)
        at Ic (<anonymous>:7:108148)
        at Ef (<anonymous>:2:186645)
    

    Reproduction Steps

    Please tell us what you were doing when this error occurred, so we can more easily debug it and find a solution.

    User Agent

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
    
    opened by mahavishnup 0
  • NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

    NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

    Please include some context and the contents of the console in your browser's developer tools.

    JavaScript Error

    Error: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
        at yl (http://127.0.0.1:8000/:143:141704)
        at Xp (http://127.0.0.1:8000/:143:251719)
        at Kp (http://127.0.0.1:8000/:143:252080)
        at gh (http://127.0.0.1:8000/:143:267692)
        at HTMLUnknownElement.v (http://127.0.0.1:8000/:143:103631)
        at Object.Bn (http://127.0.0.1:8000/:143:103956)
        at qn (http://127.0.0.1:8000/:143:104917)
        at mh (http://127.0.0.1:8000/:143:265326)
        at t.unstable_runWithPriority (http://127.0.0.1:8000/:143:38304)
        at Ws (http://127.0.0.1:8000/:143:148134)
    

    Reproduction Steps

    Please tell us what you were doing when this error occurred, so we can more easily debug it and find a solution.

    User Agent

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
    
    opened by Mehouelley 0
  • TypeError: Cannot set properties of undefined (setting 'fill')

    TypeError: Cannot set properties of undefined (setting 'fill')

    Please include some context and the contents of the console in your browser's developer tools.

    JavaScript Error

    TypeError: Cannot set properties of undefined (setting 'fill')
        at rn (http://127.0.0.1:8000/:157:83603)
        at http://127.0.0.1:8000/:157:232672
        at http://127.0.0.1:8000/:157:232972
        at http://127.0.0.1:8000/:157:233372
        at Tp (http://127.0.0.1:8000/:157:233388)
        at fh (http://127.0.0.1:8000/:157:262165)
        at uh (http://127.0.0.1:8000/:157:262025)
        at sh (http://127.0.0.1:8000/:157:261831)
        at lh (http://127.0.0.1:8000/:157:261597)
        at Xm (http://127.0.0.1:8000/:157:259908)
    

    Reproduction Steps

    Please tell us what you were doing when this error occurred, so we can more easily debug it and find a solution.

    User Agent

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 OPR/94.0.0.0
    
    opened by Naufalspurnomo 0
  • TypeError: Cannot read properties of undefined (reading 'code_snippet')

    TypeError: Cannot read properties of undefined (reading 'code_snippet')

    Please include some context and the contents of the console in your browser's developer tools.

    TypeError: Cannot read properties of undefined (reading 'code_snippet')
        at XE (http://localhost/divya_textiles/:72:249981)
        at mi (http://localhost/divya_textiles/:72:70706)
        at Ql (http://localhost/divya_textiles/:72:122308)
        at xc (http://localhost/divya_textiles/:72:109797)
        at _c (http://localhost/divya_textiles/:72:109725)
        at Cc (http://localhost/divya_textiles/:72:109588)
        at Nc (http://localhost/divya_textiles/:72:106582)
        at hc (http://localhost/divya_textiles/:72:103958)
        at nu (http://localhost/divya_textiles/:72:119816)
        at http://localhost/divya_textiles/:72:121187
    

    User Agent

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
    
    opened by vipulgupta0615 0
  • Ignition's UI

    Ignition's UI

    Please include some context and the contents of the console in your browser's developer tools.

    JavaScript Error

    TypeError: Cannot set properties of undefined (setting 'fill')
        at rn (http://127.0.0.1:8000/:157:83603)
        at http://127.0.0.1:8000/:157:232672
        at http://127.0.0.1:8000/:157:232972
        at http://127.0.0.1:8000/:157:233372
        at Tp (http://127.0.0.1:8000/:157:233388)
        at fh (http://127.0.0.1:8000/:157:262165)
        at uh (http://127.0.0.1:8000/:157:262025)
        at sh (http://127.0.0.1:8000/:157:261831)
        at lh (http://127.0.0.1:8000/:157:261597)
        at Xm (http://127.0.0.1:8000/:157:259908)
    

    Reproduction Steps

    Please tell us what you were doing when this error occurred, so we can more easily debug it and find a solution.

    User Agent

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 OPR/93.0.0.0
    
    opened by Naufalspurnomo 0
Releases(1.4.1)
  • 1.4.1(Aug 26, 2022)

    • Revert type change (breaking change) on SolutionProviderRepository interface

    Full Changelog: https://github.com/spatie/ignition/compare/1.4.0...1.4.1

    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Aug 26, 2022)

    What's Changed

    • Improve solution provider repository interface types by @AlexVanderbist in https://github.com/spatie/ignition/pull/160
    • More readable for SQL Syntax by @SupianIDz in https://github.com/spatie/ignition/pull/159
    • Added VS Codium to the editor options by @WoutervdWaal in https://github.com/spatie/ignition/pull/130
    • Fix ${var} string interpolation deprecation by @Ayesh in https://github.com/spatie/ignition/pull/144
    • Fix typos in readme by @krsriq in https://github.com/spatie/ignition/pull/158
    • Add ability to add dynamic HTML to head and body tags by @Jubeki in https://github.com/spatie/ignition/pull/161

    New Contributors

    • @SupianIDz made their first contribution in https://github.com/spatie/ignition/pull/159
    • @WoutervdWaal made their first contribution in https://github.com/spatie/ignition/pull/130
    • @Ayesh made their first contribution in https://github.com/spatie/ignition/pull/144
    • @krsriq made their first contribution in https://github.com/spatie/ignition/pull/158
    • @Jubeki made their first contribution in https://github.com/spatie/ignition/pull/161

    Full Changelog: https://github.com/spatie/ignition/compare/1.3.1...1.4.0

    Source code(tar.gz)
    Source code(zip)
  • 1.3.1(May 16, 2022)

    • Bump Ignition UI to v4.0.2
      • Fix types: context.env can be null or undefined
    • JS bundle is no longer compressed to make debugging easier

    Full Changelog: https://github.com/spatie/ignition/compare/1.3.0...1.3.1

    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(May 12, 2022)

    What's Changed

    • Use Ignition UI v4 by @AlexVanderbist in https://github.com/spatie/ignition/pull/129
      • Bump Ignition UI version to 4.0.1
        • Fixed a missing key in Query debug section
        • Fixed selecting exceptions without accidentally collapsing the error card
        • Triple clicking a code snippet now always selects it
      • Refactor error occurrence context items types
      • Log error to console when sharing to Flare goes wrong

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.10...1.3.0

    Source code(tar.gz)
    Source code(zip)
  • 1.2.10(May 10, 2022)

    • Bump @flareapp/ignition-ui dependency to 3.3.5 (improves handling for missing stack trace frames)
    • Log error to console when sharing to Flare fails

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.9...1.2.10

    Source code(tar.gz)
    Source code(zip)
  • 1.2.9(Apr 23, 2022)

  • 1.2.8(Apr 23, 2022)

    What's Changed

    • Update .gitattributes by @angeljqv in https://github.com/spatie/ignition/pull/120
    • Fix flash of unstyled content in Livewire modals by @willemvb in https://github.com/spatie/ignition/pull/118
    • Don't add unnecessary URL fragments to share and settings menu

    New Contributors

    • @angeljqv made their first contribution in https://github.com/spatie/ignition/pull/120

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.7...1.2.8

    Source code(tar.gz)
    Source code(zip)
  • 1.2.7(Mar 29, 2022)

  • 1.2.6(Mar 23, 2022)

    What's Changed

    • Enable (slightly bigger) development build to make debugging Ignition issues easier
    • Speed up tests run process by @kudashevs in https://github.com/spatie/ignition/pull/105

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.5...1.2.6###

    Source code(tar.gz)
    Source code(zip)
  • 1.2.5(Mar 19, 2022)

  • 1.2.4(Mar 11, 2022)

    • Pass an already initialised Report object to Flare client (instead of creating a new instance)
    • Bump spatie/flare-client-php version to support passing an initialised report to flare
    • Fix the renderException method to only render the Ignition error page (without also sending a report)
    • Remove spatie/ray dependency

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.3...1.2.4

    Source code(tar.gz)
    Source code(zip)
  • 1.2.3(Mar 8, 2022)

    What's Changed

    • Suppress file check exceptions by @kudashevs in https://github.com/spatie/ignition/pull/91

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.2...1.2.3

    Source code(tar.gz)
    Source code(zip)
  • 1.2.2(Mar 8, 2022)

    What's Changed

    • fix exception caused by file_exists by @dianfishekqi in https://github.com/spatie/ignition/pull/90

    New Contributors

    • @dianfishekqi made their first contribution in https://github.com/spatie/ignition/pull/90

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.1...1.2.2

    Source code(tar.gz)
    Source code(zip)
  • 1.2.1(Mar 4, 2022)

    • Ignition UI bugfix: stacktrace with only one vendor frame no longer crashes Ignition

    Full Changelog: https://github.com/spatie/ignition/compare/1.2.0...1.2.1

    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Mar 4, 2022)

    What's Changed

    • The possibility to specify a path to the settings file using a new ConfigManager interface by @kudashevs in https://github.com/spatie/ignition/pull/57

    Full Changelog: https://github.com/spatie/ignition/compare/1.1.1...1.2.0

    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Mar 2, 2022)

    What's Changed

    • Create new build for Ignition-UI changes
    • Update README.md by @biscuit-deluxe in https://github.com/spatie/ignition/pull/54

    New Contributors

    • @biscuit-deluxe made their first contribution in https://github.com/spatie/ignition/pull/54

    Full Changelog: https://github.com/spatie/ignition/compare/1.1.0...1.1.1

    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Mar 1, 2022)

    What's Changed

    • fix: don't let exception_message be null by @innocenzi in https://github.com/spatie/ignition/pull/45
    • Update .gitattributes by @PaolaRuby in https://github.com/spatie/ignition/pull/46
    • Set vscode as default editor by @AlexVanderbist in https://github.com/spatie/ignition/pull/53
    • Add error boundaries

    New Contributors

    • @PaolaRuby made their first contribution in https://github.com/spatie/ignition/pull/46

    Full Changelog: https://github.com/spatie/ignition/compare/1.0.5...1.1.0

    Source code(tar.gz)
    Source code(zip)
  • 1.0.5(Feb 17, 2022)

    What's Changed

    • Immediately open new shares in new tab (owner URL is no longer required)
    • Render initial theme class in HTML by @willemvb in https://github.com/spatie/ignition/pull/31
    • fix: Convert query bindings to an array before mapping by @innocenzi in https://github.com/spatie/ignition/pull/43

    New Contributors

    • @willemvb made their first contribution in https://github.com/spatie/ignition/pull/31
    • @innocenzi made their first contribution in https://github.com/spatie/ignition/pull/43

    Full Changelog: https://github.com/spatie/ignition/compare/1.0.4...1.0.5

    Source code(tar.gz)
    Source code(zip)
  • 1.0.4(Feb 16, 2022)

    What's Changed

    • Refine the Windows OS check by @kudashevs in https://github.com/spatie/ignition/pull/40

    New Contributors

    • @kudashevs made their first contribution in https://github.com/spatie/ignition/pull/40

    Full Changelog: https://github.com/spatie/ignition/compare/1.0.3...1.0.4

    Source code(tar.gz)
    Source code(zip)
  • 1.0.3(Feb 13, 2022)

    What's Changed

    • Update incorrectly documented namespace by @imliam in https://github.com/spatie/ignition/pull/23
    • Ensure example exception is... an exception by @imliam in https://github.com/spatie/ignition/pull/24
    • add check to make sure ConfigFilePath is readable by @leafling in https://github.com/spatie/ignition/pull/36

    New Contributors

    • @imliam made their first contribution in https://github.com/spatie/ignition/pull/23
    • @leafling made their first contribution in https://github.com/spatie/ignition/pull/36

    Full Changelog: https://github.com/spatie/ignition/compare/1.0.2...1.0.3

    Source code(tar.gz)
    Source code(zip)
  • 1.0.2(Jan 19, 2022)

  • 1.0.1(Jan 18, 2022)

  • 1.0.0(Jan 18, 2022)

  • 0.0.8(Jan 14, 2022)

    • Misc. fixes

    • Misc. fixes

    • Empty warning

    • AppDebugWarning layout

    • wip

    • Merge branch 'main' of github.com:spatie/ignition

    • Newer Tailwind to render dump colors

    • Remove tailwind watchter

    • Fix type issue

    Source code(tar.gz)
    Source code(zip)
  • 0.0.2(Jan 11, 2022)

Owner
Spatie
We create products and courses for the developer community
Spatie
Database Engineering PHP Project

ICT502-Database-Engineering This repository contains the Database Engineering end-of-semester project. It uses PHP as the back-end processing language

Farhana Ahmad 2 Oct 11, 2021
Thin Backend is a Blazing Fast, Universal Web App Backend for Making Realtime Single Page Apps

Website | Documentation About Thin Thin Backend is a blazing fast, universal web app backend for making realtime single page apps. Instead of manually

digitally induced GmbH 1.1k Dec 25, 2022
🍉 Reactive & asynchronous database for powerful React and React Native apps ⚡️

A reactive database framework Build powerful React and React Native apps that scale from hundreds to tens of thousands of records and remain fast ⚡️ W

Nozbe 8.8k Jan 5, 2023
Lovefield is a relational database for web apps. Written in JavaScript, works cross-browser. Provides SQL-like APIs that are fast, safe, and easy to use.

Lovefield Lovefield is a relational database written in pure JavaScript. It provides SQL-like syntax and works cross-browser (currently supporting Chr

Google 6.8k Jan 3, 2023
🍹 MongoDB ODM for Node.js apps based on Redux

Lightweight and flexible MongoDB ODM for Node.js apps based on Redux. Features Flexible Mongorito is based on Redux, which opens the doors for customi

Vadim Demedes 1.4k Nov 30, 2022
Jsynchronous.js - Data synchronization for games and real-time web apps.

Jsynchronous.js Synchronize your rapidly changing app state with all connected browsers. Jsynchronous ensures all clients see the same data as what’s

Sirius 111 Dec 16, 2022
Illustration of issues around use of top-level await in Vite apps

vite-top-level-await-repro Illustration of issues around use of top-level await in Vite apps: https://github.com/vitejs/vite/issues/5013 Top-level awa

Rich Harris 6 Apr 25, 2022
Front-End Landing Page for යාකා Cars Business

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Chathushka Rodrigo 3 Jan 18, 2022
GraphErr is an open-source error handling library for GraphQL implementations in Deno. It's a lightweight solution that provides developers with descriptive error messages, reducing ambiguity and improving debugging.

GraphErr Descriptive GraphQL error handling for Deno/Oak servers. Features Provides additional context to GraphQL's native error messaging for faster

OSLabs Beta 35 Nov 1, 2022
A status monitor for Elite Dangerous, written in PHP. Designed for 1080p screens in the four-panel-view in panel.php, and for 7 inch screens with a resolution of 1024x600 connected to a Raspberry Pi.

EDStatusPanel A status monitor for Elite Dangerous, written in PHP. Designed for 1080p screens in the four-panel-view in panel.php, and for 7 inch scr

marcus-s 24 Oct 4, 2022
caniuse.com but for PHP - a searchable list of new and deprecated features in recent PHP versions

caniphp.com caniphp.com is like caniuse.com but for PHP features. It's a simple search of PHP features that added, deprecated and removed in recent ve

Ross Wintle 95 Dec 25, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
The awesomebooks project is a simple list, but separated into 3 parts and given a retro feel. The main page is where we can add books, and on another page we can see the list, and remove items. There is also a "contact-us" page.

Awesome Books This is the restructured version of the famous awesome-books project! Here you can find JavaScript broken into modules, using import-exp

Matt Gombos 12 Nov 15, 2022
Mobile app development framework and SDK using HTML5 and JavaScript. Create beautiful and performant cross-platform mobile apps. Based on Web Components, and provides bindings for Angular 1, 2, React and Vue.js.

Onsen UI - Cross-Platform Hybrid App and PWA Framework Onsen UI is an open source framework that makes it easy to create native-feeling Progressive We

null 8.7k Jan 8, 2023
Mobile app development framework and SDK using HTML5 and JavaScript. Create beautiful and performant cross-platform mobile apps. Based on Web Components, and provides bindings for Angular 1, 2, React and Vue.js.

Onsen UI - Cross-Platform Hybrid App and PWA Framework Onsen UI is an open source framework that makes it easy to create native-feeling Progressive We

null 8.7k Jan 4, 2023
The fastest way to build beautiful Electron apps using simple HTML and CSS

Photon UI toolkit for building desktop apps with Electron. Getting started Clone the repo with git clone https://github.com/connors/photon.git Read th

Connor Sears 9.9k Dec 29, 2022
Flutter makes it easy and fast to build beautiful apps for mobile and beyond

Flutter is Google's SDK for crafting beautiful, fast user experiences for mobile, web, and desktop from a single codebase. Flutter works with existing

Flutter 148.1k Jan 7, 2023
⛔️ DEPRECATED - Dependency-free notification library that makes it easy to create alert - success - error - warning - information - confirmation messages as an alternative the standard alert dialog.

DEPRECATED This repository is no longer supported, please consider using alternatives. Dependency-free notification library. Documentation » Hi NOTY i

Nedim Arabacı 6.7k Dec 21, 2022