linguist icon indicating copy to clipboard operation
linguist copied to clipboard

Assets problem

Open kmuharam opened this issue 8 years ago • 2 comments

Hello,

Using Laravel 5.5, and Linguist ^2.1, when using asset to link a style sheet or a javascript file I get 404 and the URL becomes localhost:8000/ar/css/.....

kmuharam avatar Dec 10 '17 14:12 kmuharam

Indeed there is a problem... i do not use the asset myself and because of this i haven't come face to face with this bug.

i'll look into this asap to find a fix.

until then, a quick fix would be a url rewrite or just do not use asset.

<script src="/css/app.js">

keevitaja avatar Dec 11 '17 06:12 keevitaja

I've solved this problem creating another function helper (If I can, then I will add a PR)

Steps I've follow:

  • Create a file in app folder called helpers.php
  • Add to composer.json in autoload node:
"autoload": {
        "files": [
            "app/helpers.php"
        ],
}
  • Add follow code to app/helpers.php
if (! function_exists('linguist_asset')) {
    /**
     * Generate a linguist asset path for the application.
     * @param $path
     * @param null $secure
     * @return string
     */
    function linguist_asset($path, $secure = null)
    {
        $urlGenerator = app('url');

        if ($urlGenerator->isValidUrl($path)) {
            return $path;
        }

        $root = $urlGenerator->formatRoot(
            $urlGenerator->formatScheme($secure)
        );

        $urlSegments = explode('/', $root);

        if (in_array(end($urlSegments), config('linguist.enabled'))) {
            $root = str_replace('/' . end($urlSegments), '', $root);
        }

        $index = 'index.php';

        return (
            str_contains($root, $index) ?
                str_replace('/'.$index, '', $root) : $root
            ).'/'.trim($path, '/');
    }
}

if (! function_exists('secure_linguist_asset')) {
    /**
     * Generate a linguist asset path for the application.
     *
     * @param  string  $path
     * @return string
     */
    function secure_linguist_asset($path)
    {
        return linguist_asset($path, true);
    }
}
  • Run composer dumpautoload -o in terminal to load the file

Note: Always publish the config with php artisan vendor:publish --provider="Keevitaja\Linguist\LinguistServiceProvider"

How to use?

Examples:

<link rel="stylesheet" href="{{ linguist_asset('css/style.css') }}"> <script type="text/javascript" src="{{ linguist_asset('js/my_js.js') }}"></script>

With HTTPS:

<link rel="stylesheet" href="{{ secure_linguist_asset('css/style.css') }}"> <script type="text/javascript" src="{{ secure_linguist_asset('js/my_js.js') }}"></script>

lscortesc avatar Jun 22 '18 19:06 lscortesc