Coder Social home page Coder Social logo

laravel-favicon's Introduction

Laravel Favicon

Latest Version on Packagist Build Status Quality Score Total Downloads

Create dynamic favicons based on your environment settings.

Laravel Package Development

https://phppackagedevelopment.com

If you want to learn how to create reusable PHP packages yourself, take a look at my upcoming PHP Package Development video course.

Installation

You can install the package via composer:

composer require beyondcode/laravel-favicon

The service provider for this package will be automatically registered for you.

Compatibility

1.0 1.1 1.2 1.3 1.4 1.5 1.6
5.6.x
5.7.x
5.8.x
6.x
7.x
8.x
9.x
10.x
11.x

Usage

To make use of this package, make use of the favicon helper function that this package provides.

You can simply wrap the function around your favicon icon names, like this:

<link rel="icon" type="image/png" sizes="32x32" href="{{ favicon(asset('favicon-32x32.png')) }}">

<link rel="shortcut icon" href="{{ favicon('favicon.ico') }}" />

Customization

You can completely customize which environments you want to have enabled for the favicon generation, as well as the font and colors that will be used.

To modify the default values, publish the package configuration file using:

php artisan vendor:publish --provider='BeyondCode\LaravelFavicon\FaviconServiceProvider' --tag='config'

This will publish the config/favicon.php file.

This is what the default content looks like:

return [

    /*
     * The list of enabled environments for the dynamic favicon
     * generation. You can specify the text to display as well
     * as the font and background color for the text.
     *
     * If no background color is specified, the text will be
     * on a transparent background.
     */
    'enabled_environments' => [
        'local' => [
            'text' => 'DEV',
            'color' => '#000000',
            'background_color' => '#ffffff',
        ],
    ],

    /*
     * The dynamic favicon text padding to apply.
     */
    'padding' => [
        'x' => 2,
        'y' => 2,
    ],

    /*
     * The font file to use for the dynamic favicon generation.
     * The default value will use OpenSans Regular.
     */
    'font' => null,

    /*
    * Intervention Image supports "GD Library" and "Imagick" to process images
    * internally. You may choose one of them according to your PHP
    * configuration. By default, PHP's "GD Library" implementation is used.
    *
    * If you want to convert ICO files, you need to use imagick.
    *
    * Supported: "gd", "imagick"
    *
    */
    'image_driver' => 'gd',

    /*
     * The prefix to use for the dynamic favicon URL.
     */
    'url_prefix' => 'laravel-favicon',

    /*
     * The favicon generator class to use. The default generator
     * makes use of the environment settings defined in this file.
     * But you can create your own favicon generator if you want.
     */
    'generator' => \BeyondCode\LaravelFavicon\Generators\EnvironmentGenerator::class,


];

Modify the settings to suit your needs.

Custom generator

The default favicon generator will write the text on the bottom-right corner of your favicon, in the desired color, font and background-color. If you want to generate a completely custom favicon, you can create your own FaviconGenerator implementation class and set it in the configuration file.

This is the interface that the generator should implement:

interface FaviconGenerator
{
    public function generate(string $icon): Response;

    public function shouldGenerateFavicon(): bool;
}

The generate method receives the icon url/filename and expects you to return an illuminate HTTP response.

The shouldGenerateFavicon method can be used to determine if a custom favicon should get generated.

FAQ

My ICO files are not working, why?

In order to modify ICO files, you need the Imagick PHP library installed and enabled in your config/favicon.php file.

Is there a performance impact when I'm using this package?

No - the default generator only modifies your favicon when the specified environment is enabled. This means, that production environments only see the static assets that you already have.

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

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

laravel-favicon's People

Contributors

abejenaru avatar danielebarbaro avatar dsbilling avatar gerpo avatar lloricode avatar mpociot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-favicon's Issues

Support for PHP 8.0

Is this in the works?

We have a project where we use PHP 8.0 and would love to use this package to distinguish between production and development tabs in the browser.

Make it a dev dependency

Very nice little quality of life feature.

But I only need this dependency in my development and test environments, so it qualifies as a dev dependency. So the first thing I did was add a custom helper method for the production environment.

/**
 * Placeholder for the laravel-favicon package that doesn't exist on production
 */
if ( ! function_exists('favicon') && env('APP_ENV') == 'production') {
    function favicon($image)
    {
        return $image;
    }
}

I'm sure you already thought about this, but I'd like to propose adding this option to the readme. What do you think?

Installation failed, reverting ./composer.json to its original content.

This is the output

Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for beyondcode/laravel-favicon ^1.0 -> satisfiable by beyondcode/laravel-favicon[1.0.0].
- Conclusion: remove laravel/framework v5.8.26
- Conclusion: don't install laravel/framework v5.8.26
- beyondcode/laravel-favicon 1.0.0 requires illuminate/support 5.6.|5.7. -> satisfiable by illuminate/support[5.6.x-dev, 5.7.17, 5.7.18, 5.7.19, 5.7.x-dev, v5.6.0, v5.6.1, v5.6.10, v5.6.11, v5.6.12, v5.6.13, v5.6.14, v5.6.15, v5.6.16, v5.6.17, v5.6.19, v5.6.2, v5.6.20, v5.6.21, v5.6.22, v5.6.23, v5.6.24, v5.6.25, v5.6.26, v5.6.27, v5.6.28, v5.6.29, v5.6.3, v5.6.30, v5.6.31, v5.6.32, v5.6.33, v5.6.34, v5.6.35, v5.6.36, v5.6.37, v5.6.38, v5.6.39, v5.6.4, v5.6.5, v5.6.6, v5.6.7, v5.6.8, v5.6.9, v5.7.0, v5.7.1, v5.7.10, v5.7.11, v5.7.15, v5.7.2, v5.7.20, v5.7.21, v5.7.22, v5.7.23, v5.7.26, v5.7.27, v5.7.28, v5.7.3, v5.7.4, v5.7.5, v5.7.6, v5.7.7, v5.7.8, v5.7.9].
- don't install illuminate/support 5.6.x-dev|don't install laravel/framework v5.8.26
- don't install illuminate/support 5.7.17|don't install laravel/framework v5.8.26
- don't install illuminate/support 5.7.18|don't install laravel/framework v5.8.26
- don't install illuminate/support 5.7.19|don't install laravel/framework v5.8.26
- don't install illuminate/support 5.7.x-dev|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.0|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.1|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.10|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.11|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.12|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.13|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.14|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.15|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.16|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.17|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.19|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.2|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.20|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.21|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.22|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.23|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.24|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.25|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.26|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.27|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.28|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.29|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.3|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.30|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.31|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.32|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.33|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.34|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.35|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.36|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.37|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.38|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.39|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.4|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.5|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.6|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.7|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.8|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.6.9|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.0|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.1|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.10|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.11|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.15|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.2|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.20|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.21|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.22|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.23|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.26|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.27|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.28|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.3|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.4|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.5|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.6|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.7|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.8|don't install laravel/framework v5.8.26
- don't install illuminate/support v5.7.9|don't install laravel/framework v5.8.26
- Installation request for laravel/framework (locked at v5.8.26, required as 5.8.*) -> satisfiable by laravel/framework[v5.8.26].
Installation failed, reverting ./composer.json to its original content.

Support Laravel 9

If i try to install this package in a l9 project composer fail to install

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires beyondcode/laravel-favicon ^1.4 -> satisfiable by beyondcode/laravel-favicon[1.4.0].
    - beyondcode/laravel-favicon 1.4.0 requires illuminate/http 5.6.*|5.7.*|5.8.*|6.*|7.*|8.* -> found illuminate/http[v5.6.0, ..., 5.8.x-dev, v6.0.0, ..., 6.x-dev, v7.0.0, ..., 7.x-dev, v8.0.0, ..., 8.x-dev] but these were not loaded, likely because it conflicts with another require.

You can also try re-running composer require with an explicit version constraint, e.g. "composer require beyondcode/laravel-favicon:*" to figure out if any version is installable, or "composer require beyondcode/laravel-favicon:^2.1" if you know which you need.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.